Java 位运算符的澄清
我正在尝试读取图像并打印特定颜色名称的RGBA值(始终保持Alpha值不变)。这可以用一种非常复杂的方法实现,但我在互联网上遇到了这个函数。它工作得非常好,但我无法理解它是如何工作的,因为我只熟悉在2个操作数上操作的位运算符 这是密码Java 位运算符的澄清,java,bitwise-operators,Java,Bitwise Operators,我正在尝试读取图像并打印特定颜色名称的RGBA值(始终保持Alpha值不变)。这可以用一种非常复杂的方法实现,但我在互联网上遇到了这个函数。它工作得非常好,但我无法理解它是如何工作的,因为我只熟悉在2个操作数上操作的位运算符 这是密码 public block(int r, int g, int b) { color = r << 24 | g << 16 | b << 8 | 0xff } 公共块(int r、int g、int b) { color=r
public block(int r, int g, int b)
{
color = r << 24 | g << 16 | b << 8 | 0xff
}
公共块(int r、int g、int b)
{
color=r所以你想告诉大家的是,由于所有3个值加起来占32位数据,前8位存储r值,后8位存储G值,依此类推。ra负数按位表示为二进制中的前导1,所以-1实际上是0xFFFFFF。所以当你将它向左移位16位时,你会以0xffff0000结束。当您按位或使用R值时,它将把R值变成255。我现在明白了,谢谢您详细解释:)
x << y -> base 2 == base 10 explanation
1 0 1 1 multiply by 2^0 = x1 = shift 0 times
1 1 10 2 multiply by 2^1 = x2 = shift 1 time
1 2 100 4 multiply by 2^2 = x4 = shift 2 times
1 3 1000 8 multiply by 2^3 = x8 = shift 3 times
3 1 110 6 multiply by 2^1 = x2 = shift 1 time
5 2 10100 10 multiply by 2^2 = x4 = shift 2 times
rrrrrrrr 00000000 00000000 00000000 // R << 24: added 24 zeroes
+ gggggggg 00000000 00000000 // G << 16: added 16 zeroes
+ bbbbbbbb 00000000 // B << 8: added 8 zeroes
+ 11111111 // 0xff for "fully opaque"
---------------------------------------
rrrrrrrr gggggggg bbbbbbbb 11111111 // RGBA8, a 32-bit int
x &= 0xff; // guarantees that only the lowest 8 bits of 'x' can be set