2014-04-29 42 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