C++ 0和128之间的差异

C++ 0和128之间的差异,c++,c,computer-architecture,C++,C,Computer Architecture,使用8位范围==>-128到127的有符号整数 并考虑2的补码表示: 10000000 =128/(-0) [ Since its 2's Complement is 10000000 ] 所以在某种程度上它是负零 现在对于一个有符号整数,128是1000万,2的补码也是1000万,所以我们不是有一个0的副本(也是负数形式)使用这个表示法吗?或者我错过了什么 对不起,打错了。是的,范围是-128到127 但是8位可以表示内存10000000中的这个数字。如果这个数字可以存储在内存中,那么它的值

使用8位范围==>-128到127的有符号整数

并考虑2的补码表示:

10000000 =128/(-0) [ Since its 2's Complement is 10000000 ]
所以在某种程度上它是负零

现在对于一个有符号整数,128是1000万,2的补码也是1000万,所以我们不是有一个0的副本(也是负数形式)使用这个表示法吗?或者我错过了什么

对不起,打错了。是的,范围是-128到127


但是8位可以表示内存10000000中的这个数字。如果这个数字可以存储在内存中,那么它的值是多少?

您缺少一个事实,即2的comp中8位数字的范围是-128到127,而不是-127到128。你也误解了2的comp是如何工作的,你把它当作了一个例子

2的comp循环当它达到其最大值时,您不能简单地通过查看符号位,然后将剩余位作为正常值查看,然后将两者合并来读取。这将是符号和大小。e、 g

10000001-这是-127,不是-1 1000010-这是-126,不是-2 1000011-这是-125,不是-3 但是8位可以表示内存10000000中的这个数字。如果这 数字可以存储在内存中,那么它的值是多少


它的值是-128。

不,有符号整数的10000000值不是128,而是-128。最高有效位用作符号位。

范围为-128到127,而不是-127到128-128编码为0b10000000。请注意,顶部的位是符号位,因此0b10000000是负数。二者的-128补码实际上是128,但这超出了整数的范围,不能用它来表示

如果整数为16位,-128将由0B1111110000000表示,128将由0b0000000010000000表示。较低的字节确实相同,但整数的其余部分不同,这很重要


所以你的结论是128,或者-128,是,呃。。。不变量WRT 2的补码是错误的

在某种程度上,它是一个负零

绝对不是负零。根据定义,x的两个补码是~x+1,假设8位算术运算,~0+1是0000,而不是1000 0000。所以零是负零

正如你所说,两个1000万的补数是1000万,所以这是另一个值,它自己的否定


在无符号二进制表示中,1000 0000表示128。在8位2的补码表示中,它表示-128,这与-127是~0111111+1,即1000 0001这一事实一致。它不能同时表示128和-128,所以它必须是一个或另一个。选择-128有一个很好的特性,即对于负数,第一位总是1,对于非负数,第一位总是0,因此可以称为符号位。

10000000不是-0。它在任何加法中都不充当-0


例如:1+-0=0000 0001+1000 0000=1000 0001=-127

的确,8位模式10000000可以解释为128或-128。这只是一个协议问题

如果我们同意将其解释为128,那么8位整数的2-s补码范围将为-127..128

如果我们同意将其解释为-128,那么8位整数的2-s补码范围将为-128..127

标准2的补码表示法同意将10000000解释为-128,因为知道高阶位为1的所有表示法始终表示负数是相当方便的。因此,在实践中,有符号2的补码表示的范围总是略微向负值移动


另外,不清楚负零在图片中的位置。2的补码没有负零。

没有128。编辑问题以修正范围,但仍然谈论128有点愚蠢。它不在范围内,因此不具有代表性。点击,你已经从一个合理的问题转移到了一个关于代表性的错误上,但考虑到您对一个开放式历史问题的误解,即为什么计算机体系结构设计师使用2s补码进行int存储,以及这是否是一个好主意,这是合理的。这超出了StackOverflow的目的。维基百科关于《星际迷航》的文章可能会更好地为你提供你需要的背景。很快,这将演变成一场关于《星际迷航》有多少原创剧集的争论。正确答案是78。@MGZero它是42,在基数19中:PI知道它不是。你不明白这个问题。@Lohit:啊,好吧,如果你知道它在某种程度上不是负零,那么你不说它是,就可以节省我一些时间。幸运的是,我可以告诉你10000000代表什么,以及为什么,而不理解这个问题的每一个细微差别。+1因为我说出了OP关于负零的废话。对不起,我编辑了你的帖子,而不是我的。