java中byte的无符号数值获取
正如大家所知,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.