我是通過以下oracle java class工作,遇到這行代碼:瞭解Java運算符<<
public synchronized int getRGB() {
return ((red << 16) | (green << 8) | blue);
}
我迷路了,什麼「< <」的意思,我也不知道是什麼返回語句假設返回
我是通過以下oracle java class工作,遇到這行代碼:瞭解Java運算符<<
public synchronized int getRGB() {
return ((red << 16) | (green << 8) | blue);
}
我迷路了,什麼「< <」的意思,我也不知道是什麼返回語句假設返回
24位顏色通常表示爲RRRRRRRRGGGGGGGGBBBBBBBB,每種顏色具有8位值。您的代碼取紅色值,將其移位16位,將綠色值移位8位,並保持藍色值未移位,然後執行邏輯或,在這種情況下與添加值相同。想想這樣說:
你的字節值對每種顏色:
Red = 00011010
Green = 10101010
Blue = 11111111
移位後的值變成:
Red << 16 =
00011010 00000000 00000000
Green << 8 =
00000000 10101010 00000000
Blue =
00000000 00000000 11111111
邏輯或將它們合併爲:
00011010 10101010 11111111
這是你的24位RGB值,它被返回。
我喜歡你的答案比我的更好,+1。 – Brandon
public synchronized int getRGB() {
return ((red << 16) | (green << 8) | blue);
}
我迷路了,什麼「< <」的意思,我也不知道是什麼return語句想回去呢?
首先,在 '< <' 稱爲比特移位操作者。有關他們的精彩文章here。
至於你的第二個問題,看看方法的簽名......它會返回一個int
。但是,在這種情況下,它將返回並且包含值blue
和位移值的red
和。
希望這會有所幫助!
x << y
意味着 「改變x
二進制表示向左y
地方」
例如
System.out.println(4 << 2);
將打印16
。
4
是100
二進制。如果您將100
轉移到左邊的2個位置,則會得到10000
,這是十進制的16
。
請參閱[位移和位移運算符的Java教程](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)。 – rgettman