4个回答
展开全部
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
说明:
<<为位运算中的左移,a<<b表示a向左移动b位,移动后在末尾最低位补0,如1<<2得到100,即10进制的4
对应的>>为位运算中的右移,a>>b表示a向右移动b位,与左移不同的是,如果a为负数,右移后在最高位补1,如果a为正数,右移后在最高位补0
展开全部
参考计算机原理,当前一般计算机为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就是另外一回事了。
原因(假设在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(有符号)最大值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1<<31是向左移动31位啊,相当于2的31次方,所以2的31次方减去1不就是int的最大值
追问
你好 为什么要减1呢?直接移动31位不可以吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<<是移位运算,表示向左以为31位也就是2的31一次方减一,就是int最大值
追问
你好 为什么要减1呢?直接移动31位不可以吗?
追答
因为32位机器上整型的最大值是2的31次减1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询