我是靠谱客的博主 靓丽蜜蜂,最近开发中收集的这篇文章主要介绍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

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

最后

以上就是靓丽蜜蜂为你收集整理的byte类型数据范围分析的全部内容,希望文章能够帮你解决byte类型数据范围分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部