2014-04-29 43 views
-1

我是通過以下oracle java class工作,遇到這行代碼:瞭解Java運算符<<

public synchronized int getRGB() { 
    return ((red << 16) | (green << 8) | blue); 
} 

我迷路了,什麼「< <」的意思,我也不知道是什麼返回語句假設返回

+6

請參閱[位移和位移運算符的Java教程](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)。 – rgettman

回答

2

這是一個移位操作。閱讀更多here。它會將這3個數字打包成一個整數。

+5

移位不是字節移位 – Tyler

+0

我修正了「字節」與「位」與我的編輯:) – Brandon

2

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值,它被返回。

+0

我喜歡你的答案比我的更好,+1。 – Brandon

2
public synchronized int getRGB() { 
    return ((red << 16) | (green << 8) | blue); 
} 

我迷路了,什麼「< <」的意思,我也不知道是什麼return語句想回去呢?

首先,在 '< <' 稱爲比特移位操作者。有關他們的精彩文章here

至於你的第二個問題,看看方法的簽名......它會返回一個int。但是,在這種情況下,它將返回並且包含值blue位移值red和​​。

希望這會有所幫助!

2

x << y意味着 「改變x二進制表示向左y地方」

例如

System.out.println(4 << 2); 

將打印16

4100二進制。如果您將100轉移到左邊的2個位置,則會得到10000,這是十進制的16