-128的原码和补码都是一样吗?都是10000000?

-128的原码和补码都是一样吗?都是10000000?,第1张

的确都是10000000。
-128的原码是10000000。
反码是11111111。
补码反码+1:依然是10000000。(因为加1进位了,但是只有8位,所以进位无法显示)。

1,char类型是8位,最高位是符号位,0正1负,所以01111111是127。

2,-127是10000001,而10000000换算过来就是-128。

1, “一个n位有符号int型数值,其范围为-2^(n-1) ——2^(n-1) -1”。导致此情况的根本原因是“人们解决问题时,习惯以人的思维思考问题。

2,计算机本身确实以机器的思维进行处理的”。就表现为“计算机对数据的处理其实是以‘补码’的形式,而非日常生活中人们进行数学运算所采用的‘原码’的形式”,但是,人们在对“此数值范围”进行处理的时候,却习惯性的采用了“原码作为机器码”。

3,针对“数值”计算,计算机先后采用过3种机器码——原码、反码和补码。 原码 ,最高位为符号位,其余为对应数值的绝对值的二进制数值表示。反码,最高位为符号位,正数=原码 ,负数=符号位+原码对应的其他位数取反。补码, 最高位为符号位,正数=原码 , 负数=反码+1。

4,符号位“0为+,1为-”。 因为,计算机为数据类型分配了n位,超过n位的数值会被自动舍弃,就可以发现,现在计算机系统中采用的补码,克服了“原码中存在+0和-0”的情况,仅表现为一个0。

5,8位有符号位数值的范围就成为了“-2^(8-1) ——2^(8-1) -1”,即“-128——+127”。“计算机为有符号int型数值分配固定的位数n存储数据,当数据位数大于n时,大于n的位数被自动舍弃”。这就是导致数值范围为“-2^(n-1) ——2^(n-1) -1”的原因。

补码表示的8位二进制有符号整数范围是:-128d~+127d
[x]补 = 模 +x
8位二进制数的模 =2^7 =128d =1000 0000b
[-128d]补 =模 +(-128d) = 1000 0000b +(-1000 0000b) =0000 0000b
[-128d]反---超出范围,
[-128d]原---超出范围,

补码10000000唯一的表示-128是一个规定,不需要推算,理由如下:

现在来推-128的补码:

-128的补码:10000000-10000000(+128没有符号位)=10000000

-128的反码:11111111(10000000+1=10000000+11111111=11111111)

-128的原码:10000000(反码取反)

往回推:

-128的原码10000000(-128,进位被舍去)

-128的反码11111111

-128的补码10000000(11111111(反码)+1=10000000,这里实际上真正相加的是11111111后面的7位,第1位是符号位始终不会变,所以,当进到第8位的时候,就表示溢出了,会被舍弃。0只有一个补码00000000,如果是这样,那么10000000就不会表示成-0的补码

即:补码10000000唯一的表示-128,在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个

注意:(-128)也有相对应的原码和反码,它的反码是(11111111)原码仍然是(10000000)(-128)

扩展资料:

负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的。

补码的得来:是为了让负数变成能够加的正数,所以,负数的补码=模-负数的绝对值。

比如:-1补码:11111111(00000001,也就是-1的绝对值,取反加1得来)当一个数要减1的时候,可以直接加11111111。

大哥 在8位整数里原码的取值范围为-127到+127 反码也是
但补码是-128到+127,所以 -128的补码应该是10000000,其他的都溢出了,估计你问的是8位整数吧,要是16位的话就把第十六位作为符号位 就行了

-128 在八位二进制下,并没有原码和反码,只有补码。

而且,在计算机中,也只有补码,并没有原码和反码。

使用补码的意义在于:把减法转换为加法。

从而能够简化计算机的硬件。

计算机的位数是固定的,这就为补码的应用,提供了条件。

------

比如,限定,只用两位十进制 0~99,周期就是 100。

那么,减一,就可以用 +99 代替:

24 - 1 = 23

24 + 99 = (1) 23

只是保留两位数,忽略进位,结果就是相同的。

那么,99,就称为-1 的补数。

负数的补数的计算公式:100 + 负数。

------

计算机使用二进制,通常是指定为八位。

即,可以使用 0000 0000~1111 1111,共有 256 种。

对应的十进制,就是 0~255。周期是 256。

那么,减一,就可以用 +255 代替。

即:

-1 的补码是 1111 1111 (十进制 255)。

-2 的补码是 1111 1110 (十进制 254)。

-3 的补码是 1111 1101 (十进制 253)。

。。。依次减一,直到-128。。。

-128 的补码,1000 0000 ( = 128)。

。。。共有 128 个负数及其补码。。。

------

求负数补码的公式:256+该负数。

正数:直接即可进行运算,不需要任何转换。

------

补码是有用的。

原码反码,则是毫无用处的。

所以,计算机中,并没有原码和反码。

况且,-128 也没有八位的原码和反码!

原码反码,都是什么,不必关心!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13358246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-21
下一篇 2023-07-21

发表评论

登录后才能评论

评论列表(0条)

保存