我是通过以下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