Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 位运算符的澄清_Java_Bitwise Operators - Fatal编程技术网

Java 位运算符的澄清

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

我正在尝试读取图像并打印特定颜色名称的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
所以你想告诉大家的是,由于所有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