我正在阅读一些 C 文本。在负值和正值环节,作者提到了几种用二进制形式表示负数的方法。
一路看懂了,想知道给定一个二进制数,能不能判断它是不是负数?
例如,-92 具有 8 位二进制形式:10100100
。但是,如果给定 10100100
,我们可以说它是 -92,而不是其他非负数吗?
最佳答案
For example, the (number) -92 has the binary form: 10100100 (in an 8 bit byte representation) . But if we are given 10100100, can we say that is -92, and not other non-negative number?
不,您需要提前知道使用的是签名还是未签名的表示/约定,即使您知道它是签名的,那么您还需要知道 encoding用于存储号码。
如果 8 位整数(即字节)是有符号的,那么根据 Tom 和 32bitkid,有符号整数通常存储在 2's complement 中。 , 其中 Most Significant Bit (MSB)将确定一个数字是否为负数。
例如在您的示例中,字节 10100100
可以表示有符号字节 -92
,因为:
MSB : 1 means negative
Other 7 Bits 0100100
Flip and add 1 => 1011011 + 1 = 1011100
From powers of two, right to left :
0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 0*2^5 + 1*2^6
= 4 + 8 + 16 + 64
= 92 (and thus -92 because of the MSB)
或者如果该值是一个无符号字节,那么MSB只是被视为2的下一个幂,与所有低位相同
即10100100
可以表示:
4 + 32 + 128
= 164
(同样,2 的幂,从右到左,省略 0
2 的幂)
关于整数是否应该带符号以及所需位数的决定通常取决于您需要在其中存储的值的范围。例如,一个 32 位有符号整数可以表示范围:
–2147483648 to 2147483647
而无符号的 32 位整数可以表示来自
0 to 4294967295
关于c - 如何知道二进制整数是否代表负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7794653/