为了账号安全,请及时绑定邮箱和手机立即绑定

——关于int(4字节)的取值范围由来(-2^31~2^31-1)问题?(送分篇,能者居之)

1.一个字节占8位,所以总共是32位,然后去掉第一位,也即符号位(1:负,0:正),也就剩下31位!
2.所以最小值为:-2^31,最大值为2^31,然后去掉0(0000....0000)也即2^31-1!
3.所以最后得出的范围是:-2^31~2^31-1!(正数的范围不包括0)

(是这样么,求专业人士批评指正)

正在回答

8 回答

第三简直错的离谱

0 回复 有任何疑惑可以回复我~

https://wenku.baidu.com/view/d17dd4ba1a37f111f1855b10.html

0 回复 有任何疑惑可以回复我~

不错不错 看懂了

0 回复 有任何疑惑可以回复我~

谢谢!看懂了哦!讲的不错

0 回复 有任何疑惑可以回复我~

——关于int(4字节)的取值范围由来(-2^31~2^31-1)?
1.【32位】一个字节占8位,所以4字节总共是占32位,然后去掉第一位,也即符号位(1:负,0:正),也就剩下31位!

2.【最大值:2^31-1】为什么不是2^31?

(1)假设只有三位,其中首位为符号位的话,最大值的情况不就是011吗?也即表示3.
3 = 2^(3-1)-1.

(2)32位的时候同理,01111111 11111111 11111111 11111111 //而这个数表示的值就是2^31-1.
2^31-1 = 2^(32-1)-1.

3.【最小值:-2^31】为什么不是-(2^31-1)?

(1)因为数据是由二进制补码存储的:
1)当原码为正数的时候,正数的原码反码补码都相同,即00011的反码也为00011,补码也为00011.
2)当原码为负数的时候,反码即按位取反,比如10011为原码,10011可表示-3,那么符号位不变,其余位按位取反即反码11100.那么10011的补码便是11101.

(2)所以可知int所取的最小值原码为:11111111 11111111 11111111 11111111.
它的反码为:10000000 00000000 00000000 00000000. (在原码中表示-0.)
它的补码为:10000000 00000000 00000000 00000001. (在原码中表示-1.)
依次可以类推-2,-3,-4......-2^31!
【推到-2^31】
其原码为10000000 00000000 00000000 00000001 
其反码为11111111 11111111 11111111 11111110
其补码为11111111 11111111 11111111 11111111
从上可知最小值只能表示到-2^31,而无法表示到更小的一位:-2^31-1!


4.【综上所诉,int(4字节)范围是:-2^31~2^31-1】!

(自己对于这个问题也纠结了很久,得出的结论若有不足之处,敬请批评指正,谢谢!)

0 回复 有任何疑惑可以回复我~
#1

火Rain 提问者

其实我也是醉了
2015-03-05 回复 有任何疑惑可以回复我~
#2

晴耕雨讀

还是不明白为什么最小值只能表示到-2^31?
2017-10-27 回复 有任何疑惑可以回复我~

——【_wilsonjax的回答】

不是因为去掉0.。而是它本身的最大值就是2^31-1。而不是你说的2^31。
我们不考虑那么多位,假设只有三位,其中首位为符号位的话,最大值的情况不就是011吗?32位的时候同理啊,
01111111 11111111 11111111 11111111 //而这个数表示的值就是(2^31)-1.

(支持的给个赞好么,哈哈)

3 回复 有任何疑惑可以回复我~

你理解的应该没有什么问题。

通常的平台上int型为32位,而且整型记法采用2的补码,所以你的算法也没错。

0 回复 有任何疑惑可以回复我~
#1

火Rain 提问者

谢谢回答!
2015-03-02 回复 有任何疑惑可以回复我~

这个主要看你的编译环境如果是c++编译环境,int型占4个字节,如你所说正确,如果是单纯的c编译环境int型是占2个字节,因此最小值就为-2^15,最大值为2^15-1;你的思路是没有错的

0 回复 有任何疑惑可以回复我~
#1

onemoo

其实是与运行平台有关的,不过char在C标准中规定占用一个字节,剩下的类型不同的平台有不同的规范。 常见编译器遵守ILP32或LP64规范,在这两个规范中int都占用32位。
2015-03-01 回复 有任何疑惑可以回复我~
#2

火Rain 提问者

谢谢回答!
2015-03-02 回复 有任何疑惑可以回复我~
#3

火Rain 提问者 回复 onemoo

受教了,感谢!
2015-03-02 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

——关于int(4字节)的取值范围由来(-2^31~2^31-1)问题?(送分篇,能者居之)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信