java64位详解java中的byte类型
Java也提供了⼀个byte数据类型,并且是基本类型。java byte是做为最⼩的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。下⾯这篇⽂章主要给⼤家介绍了关于java中byte类型的相关资料,需要的朋友可以参考下。
介绍
byte,即字节,由8位的⼆进制组成。在Java中,byte类型的数据是8位带符号的⼆进制数。
在计算机中,8位带符号⼆进制数的取值范围是[-128, 127],所以在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:
public class A {
public static void main(String[] args) {
int b = 456;
byte test = (byte) b;
System.out.println(test);
}
}
上述代码,最后会输出-56。原因如下:
456的⼆进制表⽰是111001000,由于int是32位的⼆进制,所以在计算机中,实际上是00000000000……111001000,当int转成byte的时候,那么计算机会只保留最后8位,即11001000。
然后11001000的最⾼位是1,那么表⽰是⼀个负数,⽽负数在计算机中都是以补码的形式保存的,所以我们计算11001000的原码为00111000,即56,所以11001000表⽰的是-56,所以最后test的值为-56。
希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助!!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论