对原码,反码,补码的一点理解。
2018-01-07 15:46
399 查看
这块儿一直迷迷糊糊的,有时做题或应用还会用到,计算机体系结构又没学好,哎。。,简单记录一下,帮助理解记忆吧。
对有符号整型而言,计算机运算采用补码形式,且不考虑符号位,以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),这样就完美了。
当然书上有更深入更准确的讲解,具体再行查阅吧。
对有符号整型而言,计算机运算采用补码形式,且不考虑符号位,以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),这样就完美了。
当然书上有更深入更准确的讲解,具体再行查阅吧。
相关文章推荐
- 理解原码,反码和补码
- 关于二进制的原码,反码和补码的问题初步理解
- 原码、反码、补码的进一步理解
- 计算机码制--深入理解 原码、反码、补码
- 对于原码、反码、补码的理解
- 原码、反码和补码的理解
- 原码、反码、补码的理解
- 关于反码、补码、原码的一些应用于理解
- 原码、反码与补码——谈谈我的理解
- 详解原码、反码、补码——深入理解补码
- 对计算机的原码,反码,补码的理解:
- 深度理解 原码, 反码, 补码
- 【总结】正确理解原码、移码、反码与补码
- 原码、反码和补码理解
- 关于原码,反码,补码的一点注记
- 通过位运算理解原码、反码和补码
- 原码,反码,补码,个人理解
- 理解原码,反码,补码转换
- 原码,反码,补码的理解
- 个人对原码-反码-补码的理解