2013-07-27 73 views
0

我正在做c類型(u8,s16,u32,..) - 對於java轉換(只是一個包含布爾型符號和長整型值的類)。當然還有位數的長度。在Java中使用按位和運算符0xFF的原因

因此,例如:u8 signed = false length = 8;

然而在轉換的類型爲int []

有是這樣的:

int[] ret = new int[length/8]; 
for (int i = 0; i < ret.length; i++) { 
    ret[ret.length - 1 - i] = (char) (0xff & (value >> ((ret.length - i - 1) * 8))); 
} 

例如值= 7;長度= 8

什麼可以0xff &()完成?因爲

0xFF的僅僅是1111 1111 7 0000 0111 =>導致0000 0111

抑或是別的東西在這裏發生的?

+0

'0xff'表示帶符號的'int'值! – NINCOMPOOP

+0

7不是0000 1000或者它的0000 0111 – Jim

+0

thx吉姆;我會改變它 – Thomas

回答

2

0xFF選擇int的前8位。所以如果value是一個int,你可以選擇前8位,這就是你需要它的原因:如果你的int容量多於8位,你可以用這個掩碼選擇它們。值>> stuff將有趣的位從當前位置移動到前8個位置,以便字節掩碼可以選擇它們。

+0

Thx;我理解簽署的右移位部分,但是;你說0xFF選擇一個int的前8位;但如果0xFF不在那裏會有什麼區別?我看不到它 – Thomas

+0

如果沒有選擇,字符的上半部分 - 其他8位 - 將包含來自int的數據,但是使用掩碼,這些位全部爲0. – morpheus05

+0

thx morpheus05; – Thomas