您的位置:首页 > 其它

原码,补码,反码

2011-07-28 18:33 211 查看
计算机运算中,有符号数的表示需要将负数编码为二进制形式。计算机数字有原码、反码、补码三种存储格式,通常都是补码(方便减运算)。

数学中,任意基数的负数都在最前面加上“−”符号来表示。然而在计算机硬件中,数字都以无符号的二进制形式表示,因此需要一种编码负号的方法。当前有四种方法,用于扩展二进制数字系统,来表示有符号数:原码(sign-and-magnitude),反码(ones' complement),补码(two's complement),以及excess-N。

所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

计算机内存中的数都是以补码的形式存放的,因为用补码的形式存放的,因为用补码表达一个数时,0的代码是唯一的,同时用补码进行运算时,数的符号位用不着单独处理。当已知一个数的补码反过来要求其原码时,只要记住“一个负数补码的补码就是它的原码”,即把补码当“原码”,再求一次补码就得原码。

所以:2取反为-3

因为:

2 的原码 0000 0010
~2 按位取反 1111 1101
由于计算机内的数据是以补码的形式存储的
所以系统认为1111 1101是按补码存储的数据,将它还原成十进制的值
也就是负数的补码取反+1,得到
1000 0011 也就是 -3

参考:http://zh.wikipedia.org/wiki/%E6%9C%89%E7%AC%A6%E8%99%9F%E6%95%B8%E8%99%95%E7%90%86

   http://baike.baidu.com/view/377340.htm

http://topic.csdn.net/u/20080227/16/f0d27d72-5100-42e8-8aeb-725f43a3933d.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: