Java/C++:(1 << 31) - 1为什么可以获得int最大值呢?

是什么原理呢?请大神指点... 是什么原理呢?请大神指点 展开
 我来答
wchyumo2011
推荐于2016-11-24 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2842万
展开全部
Java和c++中int占四个字节,也就是32位,其中第一位(最高位)为符号为,(1<<31)表示1左移31位,使得符号位为1,其他位为0,再将左移后的结果减一就使得符号位为0,其他位都为1,即为int表示的有符号数的最大整数。

说明:
<<为位运算中的左移,a<<b表示a向左移动b位,移动后在末尾最低位补0,如1<<2得到100,即10进制的4
对应的>>为位运算中的右移,a>>b表示a向右移动b位,与左移不同的是,如果a为负数,右移后在最高位补1,如果a为正数,右移后在最高位补0
禾木双子
推荐于2016-02-02 · TA获得超过260个赞
知道小有建树答主
回答量:204
采纳率:100%
帮助的人:150万
展开全部
参考计算机原理,当前一般计算机为32或64位系统。该方法只能获得32位系统的int最大值。
原因(假设在32位系统中):
1 的二进制表示 0000 0000 0000 0000 0000 0000 0000 0001
左移31位 得到 1000 0000 0000 0000 0000 0000 0000 0000
-1得到 0111 1111 1111 1111 1111 1111 1111 1111 此数为int(有符号)最大值。

当然如果是uint就是另外一回事了。
追问
你好 为什么要减1呢?直接移动31位不可以吗?
追答
您需要先了解 有符号二进制数编码
请学习http://wenku.baidu.com/link?url=9A5eXRYFMiULUIqoaVGzGvRsdDapF6Gi-9kpJEsBJzPScHrqjdxgujs4iPcpbYfsbHBdg5zpTJTw2ajSpMrRPCrv6jT6HSJyU-hYjitJJYi

直接移动31位,所代表的数不是int(有符号)最大值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
壁纸汇集站
2013-11-05 · TA获得超过155个赞
知道小有建树答主
回答量:252
采纳率:0%
帮助的人:63.5万
展开全部
1<<31是向左移动31位啊,相当于2的31次方,所以2的31次方减去1不就是int的最大值
追问
你好 为什么要减1呢?直接移动31位不可以吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
前熙熙0Hj
2013-11-05 · TA获得超过448个赞
知道小有建树答主
回答量:203
采纳率:100%
帮助的人:109万
展开全部
<<是移位运算,表示向左以为31位也就是2的31一次方减一,就是int最大值
追问
你好 为什么要减1呢?直接移动31位不可以吗?
追答
因为32位机器上整型的最大值是2的31次减1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式