正如大家所知,byte的范围是-128~127,在java中byte、short、int 等都是有符号的。

byte a = (byte)234;  
System.out.println(a);

如上代码,结果是-22。如果想输出234,该怎么做呢,首先想到的是将a 赋给大一点的类型,如下:

byte a = (byte)234;
int i = a;
System.out.println(a);

执行后,还是-22,因为int也是有符号的,所以a赋给i时,a的符号位在i中成为了i的符号位。
正确方法应该是:

byte a = (byte)234;  
int i = a;    
i = a&0xff;  
System.out.println(i);

原因是:
0xff是int,占4个字节,a是byte,占1个字节,进行&操作的细节如下:
00000000 00000000 00000000 11101010 (a)
&
00000000 00000000 00000000 11111111 (i)
---------------------------------------------------------------------
= 00000000 00000000 00000000 11101010
结果是int,但是符号位是0,说明是正数,最后就是正整数234.

标签: byte无符号, java byte无符号操作, byte

添加新评论