1. 程式人生 > >獲取java byte的無符號數值

獲取java byte的無符號數值

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來轉換就可以,比這個方便。