byte类型数据范围分析

我们都知道一件事情,java的byte类型的数据范围是从 -128 到 127.
一直在想为什么不是 -128 到 128呢?今天分析了一下这个问题。
首先我们得明白一件事情,那就是运算规则:

#######################################################################
####正数的最高位都是 0 ,正数的值就是二进制表示的值。                                      ####
####负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到得值。         ####
#######################################################################

 

我们用8位的二进制来说明一下此规则:
比如:00000001。最高位是0 为正数 ,那么表示的就是 十进制的 1。
再比如:10000001.最高位是1 为负数,值是多少?取反得到 01111110  加1 得到  01111111 ,那么值为 -127

 

理解此运算规则我们正式开始说byte,byte正好是8位的二进制数。short是16位 int是32位 long是64位。

不难理解,byte的最大正数就是 01111111(最高位必须是0),也就是 127。
那么你可能会想 byte的最小负数就是  11111111 了,对不对? 这么想就
大错特错了。让我们看看11111111这个二进制数表示多少。
根据上面的提示 我们知道这是一个负数。它的值是先取反再加1 。

11111111取反得到:00000000,加1得到 00000001 。最后得到的值为-1.
这可是最大的负数啊。由此你是不是想到了最小的负数会不会是10000000呢?
让我们算一下 取反:01111111 加1得到 10000000 最后得到 -128.

127是01111111  然而 -128是10000000 ,看出来一个奇怪的事情。
仔细的看一下这两个二进制数 是不是前者加1就得到后者呢?对。
可以编一个小程序实验一下:

byte a = 127;
a+=1;
System.out.println(a);


结果正好是-128
由此我们可以看出来二进制从 00000000 到01111111到10000000到 11111111
                           即 十进制从       0          到    127      到    -128     到 -1

现在一切都很明白了吧..

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值