C语言中 有符号数 二进制序列的值

32位二进制序列100000000000000000000000000000001的值为什么是-1,而不是2^31+1呢

  • 这篇博客: 小朋友学C语言(43):浮点数的深入分析中的 例9:二进制1 10000010 00001000000000000000000是一个单精度浮点数,对应的十进制数是多少? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 分析:
    最高位为1,表示负数;
    指数位为100000102 = 13010,130 – 127 = 3;
    尾数为00001000000000000000000,换成十进制为1 + 1/32。注意这里的1不要忘了加。
    所以表示的数为-(1 + 1/32) * 23 = -8.25

溢出到符号位了
符号位为1,那么就是负数
而且看上去应该是-2的30次方-1(我没有数过有多少0)
-1应该都是1

该回答通过自己思路及引用到各个渠道搜索综合及思考,得到内容具体如下:

在补码表示中,最高位为符号位。在32位补码表示中,最高位为1表示负数,为0表示非负数。

二进制序列100000000000000000000000000000001的最高位为1,因此它是一个负数。

在32位补码表示中,负数的表示方法为先取绝对值的二进制表示,然后对每一位取反(0变成1,1变成0),再将结果加1。例如,-1 的二进制表示为11111111111111111111111111111111。

因此,二进制序列100000000000000000000000000000001在32位补码表示中的值为:


二进制:  100000000000000000000000000000001
补码:    011111111111111111111111111111111
十进制: -1


因此,该二进制序列在32位补码表示中的值为-1,而不是2^31+1

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

最高位是符号位1代表负