“总共表示2^32个数”指的是(-2^31)+(-1)+(0)+(2^31-1)吗?
来源:6-3 数据类型、整数和补码

CheeseCheese_
2021-04-03
【直观的解法①】
假设符号位:
0:表示正数
1:表示负数
后面的数值拼接上
第一位是0,后跟31个1(二进制数)的值:2^31-1(小)
第一位是1,后面跟31个0(二进制数)的值:2^31(大)
【直观的解法②】
第一位:符号位
-1:1000…1(1+30个0+1)
1:0000…1(0+30个0+1)
-1+1算不出来=0
【补码】
负数一共有多少?
-2^31个
正数一共有多少?
2^31-1个
-2^31 + 2^31-1= 2^32-1**【????】**
但是还有一个0,0有多少个、
1个
最后:
2^32-1+1 = 2^32
请帮我看看:
- 【直观的解法①】和【直观的解法②】的理解有错误没有?
- 总共表示2^32个数 到底指的啥?
- -2^31 + 2^31-1= 2^32-1 怎么相加得来的?我还遗漏了什么吗?
- -2^31个指的是啥?个数能用负数表示吗?难导致的是二进制数?
期待解答,谢谢!!
3回答
-
ccmouse
2021-04-06
不能回答问题吗
00 -
ccmouse
2021-04-06
抱歉这里左边是二进制数值,右边是与他对应的十进制数值,不是个数。
比如1000...0对应的十进制数值是-2^31
00 -
ccmouse
2021-04-06
抱歉关键在于这张图我没有说清楚。这里右边不是个数,是与左边二进制对应的十进制数值,也就是说1000...0对应的十进制是-2^31
直观解法的理解无所谓,反正我们用的是补码不是“直观解法”,主要是不用补码很难解决我们的问题,比如会出现+0, -0等。
总共表示2^32个数。是指一个32位整数,一共能够表示2^32个不同的数值。这是应该的,因为每一位都有1,0两种可能性,所以必须要能够表示2^32个数值。那么我们需要有一种方案来实现这一点,补码就是普遍采用的方案。(而上述“直观”方案由于有2个0,所以表示不了2^32个数值,不是一个好方案)
所以后面那个相加,是说:负数一共有2^31个,正数2^31-1个,还有一个0,总共的个数是:2^31+(2^31-1)+1(个0)=2^32。和上面的“必须要能够”表示2^32个数值对应。
00
相似问题