无法用原码表示,按照原码定义,8位原码所表示真值的范围为:-127(11111111B)~+127(01111111B)。补码10000000B的真值为-128,超出了8位原码的表示范围,所以无法用8位原码表示。
数0的补码表示是唯一的。
[+0]补=[+0]反=[+0]原=00000000;
[-0]补=11111111+1=00000000。
扩展资料:
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
1、如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
2、如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
参考资料:
这个数的真值是 -2^7
源码的表示范围是 -(2^7 - 1)到 2^7 - 1
补码的表示范围是 -2^7 到 2^7 - 1
补码要多出一个数,而这个数就是你问的10000000
在源码里面00000000和100000000都是表示0
这样比较浪费,在补码里面,就把100000000当做
-2^7 ,以扩大补码表示范围
按照原码定义,8位原码所表示真值的范围为: -127(11111111B) ~ +127(01111111B)。补码10000000B的真值为-128,超出了8位原码的表示范围,所以无法用8位原码表示。
补码 10000000,原码是多少?
可以肯定的说:这个八位的原码,是不存在的。
因为,这个补码,是代表的十进制数-128 的。
而-128,有八位的补码,并没有八位的原码和反码。
因为,原码和反码的定义,都是有缺陷的:
一个数字零,它们却都定义了两个编码!
所以,八位的原码反码,只能表示-127 ~ +127。
无法表示-128。
-------------------------
顺便说一下:
用“取反加一”求-0 和-128 的补码,都是行不通的。
求补码的正规做法,是使用定义式:
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。 n 是补码的位数。
那么,[-128]补 = -128 + 2^8 = 1000 0000 (二进制)。
所以,八位的补码 1000 0000,就是代表-128。
-128 具有补码 1000 0000。
但是,-128 并没有八位的原码。