gpt4 book ai didi

c - 如何知道二进制整数是否代表负数?

转载 作者:太空狗 更新时间:2023-10-29 16:26:43 25 4
gpt4 key购买 nike

我正在阅读一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com