有符号整型数据的范围

以4字节的有符号int为例,4字节占32bit,取值范围是[-2147483648,2147483647]。问什么正数和负数的取值范围会不一样呢?

32bit,我们去掉一个符号位,还有31bit,231=2147483648,去掉全0的情况,则为
2147483647,那么不应取值范围是[-2147483648,2147483647]吗?

其实,在符号位为0(正)和1(负)时其余位为全0的含义是不同的。我们知道0是不包含正负的,在符号位为0时全0,表示的是数值0。而在符号位为1时,全0表示的是一个负数2147483648,所以负数范围也就比正数范围多1个。

取值对应的bit
00000 0000 0000 0000 0000 0000 0000 0000
-21474836481000 0000 0000 0000 0000 0000 0000 0000
所以32bit被划分为:
正数,[0000 0000 0000 0000 0000 0000 0000 0001, 0111 1111 1111 1111 1111 1111 1111 1111],也即是[1, 2147483647]
负数, [1000 0000 0000 0000 0000 0000 0000 0001, 1111 1111 1111 1111 1111 1111 1111 1111]再加上1000 0000 0000 0000 0000 0000 0000 0000,也即是[-2147483647,-1]再加上-2147483648,最后也就是[-2147483648,-1]
0,对应0000 0000 0000 0000 0000 0000 0000 0000。

注:Java没有任何无符号类型(unsigned)。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值