正负数,在计算机中,只是用【补码】来存储。
而原码和反码,在计算机中,并不存在。
下面按照八位二进制来说明补码的意义。
十进制数 0,存放形式,就是二进制 0000 0000。
十进制数 +1,就加上 1,二进制是 0000 0001。
十进制数 +2,就再加 1,二进制是 0000 0010。
。。。
十进制数 +127,加 1加 1...,就加到了 0111 1111。
+127,这就是最大数值。
----------
负数怎么办? 你就从 0,依次递减吧。
十进制数 0,以二进制 0000 0000 存放。
十进制数 -1,就减去 1,得 1111 1111 = 255(十进制)。
十进制数 -2,就再减 1,得 1111 1110 = 254。
十进制数 -3,就再减 1,得 1111 1101 = 253。
。。。
十进制数 -128,减 1减 1...,得 1000 0000 = 128。
不要再减了,这就是最小值了。
(你再继续减,就是 0111 1111,这就是+127 了。)
因此,最小数值就是-128。
----------
总结:
零和正数:直接用二进制存放。
负数:存放形式是【256+这个负数】。
这套存放格式,就是所谓的【补码】。
求【补码】,就是这么简单。
完全不用绕到“原码反码符号位”那么远。
可以用十进制来计算。如果需要二进制,你就再转换一下。
用这个方法,不涉及原码反码符号位,就少了不少麻烦事。
----------
为什么负数用补码存储?
利用补码,可以把减法运算,转换成加法。
(所以,在计算机中,有一个加法器,就够用了。)
例如,6-2 = 4,在计算机中,用补码代替数字,运算如下:
6 的补码是 0000 0110
-2 的补码是 1111 1110
--相加-------------
得: (1) 0000 0100 (= 4 的补码)
(括号中的 1,是进位,舍弃不要了。)
注意:
如果运算结果超出了-128~+127 的范围,结果将是错的。
这种现象称为“溢出”。
再注意一下:进位,并不等于溢出。
---------
因为补码的这个特性,所以,在计算机中,只是使用补码存放数据。
而原码反码,在计算机中,都是不存在的。
所以,大家,完全不必在原码反码 上浪费时间精力。
10进制转成2进制数,称为原码。
正数的原码、反码、补码都一样。
负数的反码为原码取反,负数的补码为该数的反码加1,如果想从补码再转回原码,再取反加一即可。
因为原码和反码都有正负0,所以引入补码概念,补码只有一个0。
原码:将其它进制转换成八位的二进制,其中首位是符号位。
反码:原码是正数时反码等于原码原码是负数时除首位数不变其余按位反取
补码:当数字是正数时补码等于反码,是负数时补码就等于反码加一
将10进制数转换成2进制数,称为原码,原码各位取反称为反码,反码最低位+1,称为补码。
这些主要是为了表示负数,才有了这些概念。