对原码,反码,补码的一点儿理解。
这块儿一直迷迷糊糊的,有时做题或应用还会用到,计算机体系结构又没学好,哎。。,简单记录一下,帮助理解记忆吧。
对有符号整型而言,计算机运算采用补码形式,且不考虑符号位,以1byte=8bit为例简单说明。
原码也就是这里的有符号二进制码。
对正数,反码、补码与其原码一样。
对负数,反码是符号位以外的其余各位取反,补码是反码+1,简记为‘取反加1’。
按此规则,原码,反码,补码表示范围如下:
-127, ......, -1 , 0 , 1 , ......, 127
原码:11111111,......,10000001,00000000,00000001,......,01111111
反码:10000000,......,11111110,00000000,00000001,......,01111111
补码:10000001,......,11111111,00000000,00000001,......,01111111
那么问题来了,127+127+1=255, 2^8=256,因为最高为作为符号位了,还有一个数没表示出来,现在的表示范围是-127~127。怎么办呢?
很简单,因为10000000没用上,把它作为原码的话就是-0,没什么意义,跟别提反码了,所以把10000000作为-128的补码,反正运算都是以补码的形式,这样正好表示-128~127共256个数,10000001(-127)减1正好是10000000(-128),这样就完美了。
【对原码,反码,补码的一点儿理解。】当然书上有更深入更准确的讲解,具体再行查阅吧。
推荐阅读
- MySQL|MySQL - 全文索引
- 米其林一星的街头小贩
- 《妈妈是超人》第二季第七期——对伊能静生娃有感而发
- 弘辽电商|弘辽科技(拼多多店铺如何应对价格战)
- 晨报|【钛晨报】国家互联网信息办公室对滴滴全球股份有限公司依法作出网络安全审查相关行政处罚的决定;美国白宫:美国总统拜登COVID-19检测呈阳性;
- 纵使虐我千百遍,我仍对你如初恋
- 随心境而变幻的歌
- 追剧|追剧 |《我选择了不结婚》("我绝对会找个好对象给你们看的!")
- 认真对待自己
- 【PostgreSQL|【PostgreSQL 15】PostgreSQL 15对UNIQUE和NULL的改进