2013-11-03 34 views
0

我正在開發一個小型項目。在谷歌搜索過程中,我看到了一些java代碼。>> java代碼顏色示例中>>和&運算符的含義

int red = (pixel >> 16) & 0x000000FF; 

但我不明白這是什麼意思?有人解釋過那個邏輯運算的總結嗎?我讀到它是這樣轉移的,但轉移了什麼?

+0

看到我忘了寫你好或某事像的方式。大家好 !:) – user2908225

+2

你可以在這裏找到java中的每個運算符:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html它是按位和btw。 – zeller

+0

@user不要擔心,這裏跳過這種愉悅是正常的。 –

回答

1

這是一個按位與「AND」運算符。當它應用於數字FF(十六進制)時,它將清除除最後8以外的整數的所有位。

回想一下,按位與「AND」會經歷數字的二進制表示,並將結果僅放入結果中兩個操作數都有的位置。由於包含一個FF 32位掩碼看起來像這樣在二進制

00000000000000000000000011111111 

上部三個字節結果的將是零。最後一個字節,其中FF具有全1,將等於第一個操作數的最後一個字節。

1

顏色的紅色成分存儲爲0-255之間的數字,但「打包」成一個整數。這是我的ASCII藝術,二進制,每個整數32位,顯示Alpha,Red,Green和Blue各8位。垂直讀取位數!我是從1開始編號,而不是0。(另外,你可以說,數字走偏方向 - 它們的存在只是爲了幫你算)

  11111111112222222222333 
123456789
AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB the pixel value 

pixel >> 16將結果向右移位16位位。實際上,這將刪除G和B的東西

AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB move everything 16 to the right, this becomes 
----------------AAAAAAAARRRRRRRR 

其中 - 取決於符號。你可以查看它,但在這種情況下,它並不重要。

所以,你有你的紅色號碼,差不多。還有阿爾法分量,所有AA ....如果掩模(「和」)爲0xFF,這是最低的8位

----------------AAAAAAAARRRRRRRR (result of the bit shift) 
00000000000000000000000011111111 (0xFF) 
you get 
000000000000000000000000RRRRRRRR 

這是期望的結果,0和255之間的數。