獲取java byte的無符號數值
阿新 • • 發佈:2019-02-14
byte a = (byte)234;
System.out.println(a);
上面的程式碼,結果是-22,因為java中byte是有符號的,byte範圍是-128~127。
如果想輸出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.
其實這個方法在C語言中也可以獲取有符號char的無符號值,但是C語言中可以直接使用unsigned來轉換就可以,比這個方便。