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

另外:

8位(bit)=1字节(Byte),1024字节=1KB;

提到了字节,不得不再提到“字”这个计量单位:“字”由若干个字节构成,字的位数叫做字长,字长就是说字所对应的二进制数的长度。不同的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。
前期的DOS就是8位的,后期的DOS是16位的,Win9X是基于DOS的,所以也是16位的,NT核心的Windows是32位的,现在也有了64位的XP/2003,CPU也有了64位的,这个操作系统和CPU所说的位就是bit的意思,即二进制数的长度。
字节是固定由8位二进制构成,64位系统就代表了64位的二进制代表一个字,换算成字节就是64/8=8,即是说由8字节构成一个字,32位系统就是32/8=4,4个字节代表一个字。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值