我有个问题:你知道2s补码,所以你可以得到一个正数的负数,反之亦然,再加上一个。例如:
8 Bit
121 = 0111 1001
1st= 1000 0110
+ 0000 0001
---------
1000 0111 --> -121 所以现在如果我们有-0
零看起来是8位
0000 0000所以负0应该看起来
1111 1111 + 0000 0001
= 10000 0000但那是512
所以我想我误会了
发布于 2014-05-19 21:58:16
1 0000 0000b是256,而不是512。截断为8位,等于0。
这是因为用二的补数,零等于零。没有正负零。
将其与一个人的补语或符号位进行比较,其中正零和负零是不同的值。
发布于 2014-05-19 22:25:50
来扩展我先前对这个问题的评论
8位中的1111 1111 + 0000 0001是0000 0000,第9位是丢失的,因为它没有位置。
是的,否定句的补语是肯定的
-121 = 1000 0111
1st = 0111 1000
+ 0000 0001
---------
0111 1001 --> 121 把它们看作一个圆,在某个点有0,一次加1到相反的点(128,8位),在那个点,符号被切换,绝对值开始下降,例如:128 + 1 = -127,当你继续添加1时,值返回到0,圆圈就完成了。
因此,给定一些位,您只有那么多位,没有更多,如果您想要对值进行签名,则实际上只有x-1位表示该值,因为最重要的位用于符号(0 -> +;1 -> -)。
https://stackoverflow.com/questions/23747736
复制相似问题