0

我正在做一个小项目。在谷歌搜索期间,我看到一些 java 代码。

 int red = (pixel >> 16) & 0x000000FF;

但我不明白那是什么意思?任何人都可以解释该逻辑操作的摘要吗?我读到它是这样转移的,但是转移了什么?

4

3 回答 3

3

颜色的红色分量存储为 0-255 之间的数字,但“打包”为整数。这是我的 ASCII 艺术,二进制,每个整数 32 位,显示 Alpha、Red、Green 和 Blue 各 8 位。垂直读取位数!我从 1 开始编号,而不是 0。(此外,您可以争辩说这些数字的方向是错误的——它们只是为了帮助您计数!)

         11111111112222222222333
12345678901234567890123456789012
AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB   the pixel value

会将结果pixel >> 16右移 16 位。实际上,这删除了 ​​G 和 B 的东西

AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB  move everything 16 to the right, this becomes
----------------AAAAAAAARRRRRRRR 

其中 - 取决于符号。您可以查找它,但在这种情况下它并不重要。

所以,你几乎有你的红色号码。仍然有 Alpha 分量,所有 AA.... 如果你用 0xFF 屏蔽(“和”),这是最低 8 位

----------------AAAAAAAARRRRRRRR    (result of the bit shift)
00000000000000000000000011111111    (0xFF)
you get
000000000000000000000000RRRRRRRR

这是所需的结果,一个介于 0 和 255 之间的数字。

于 2013-11-04T05:12:19.973 回答
1

这是一个按位“AND”运算符。当它应用于数字FF(十六进制)时,它将清除除最后 8 位之外的 int 的所有位。

回想一下,按位“AND”通过一个数字的二进制表示,并且只将结果中的两个操作数都有一个的位置。由于包含的 32 位掩码FF在二进制中看起来像这样

00000000000000000000000011111111

结果的前三个字节将为零。最后一个字节(FF全为 1)将等于第一个操作数的最后一个字节。

于 2013-11-03T10:52:10.270 回答
0

& - 按位与运算符

>> - 右移运算符 - 将位模式向右移动

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

例如

4 在二进制 100 中,如果你做 >>1 那将是 010 即 2

8 在二进制 1000 中,如果你做 >>1 那将是 0100 即 4

也可以看看

什么是按位移位(bit-shift)运算符,它们是如何工作的?

于 2013-11-04T05:34:19.457 回答