10000000-00000001=10000000+11111111=011111111 ,结果为01111111,而且有进位,表示有溢出,最高为必须参与运算,因为机器是不知道是否原码还是补码,这也就是把减法变成加法的方法。128已经超出一个字节的有符号整数的表示范围了,-128为10000000,正数只能到127。
有符号二进制数 1000 0000 作为补码,求原码
这是一个无解的难题。
按照“取反加一”的说法,每个补码,都有一个对应的原码。
但是,就有这样一种情况:
-128 具有八位的补码,却没有原码和反码。
取反加一吧!
拿什么取反加一?
鼓吹“取反加一”的小伙伴,是不是有些尴尬呀?
-----------------------
其实,补码的来源,和原码反码符号位,是毫无关系的。
计算机所使用的补码,是由“数值”推导出来的。
补码,有自己定义式。如下:
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。 n 是补码的位数。
这公式,是通用的。 你去翻翻书,应该可以找到。
---------------------
那么,[-128]补 = -128 + 2^8 = 1000 0000 (二进制)。
所以,补码 1000 0000,它代表的数值,就是-128。
而-128 的八位原码和反码,就别想了。
符号位不取反吧