我正在做一个小项目。在谷歌搜索期间,我看到一些 java 代码。
int red = (pixel >> 16) & 0x000000FF;
但我不明白那是什么意思?任何人都可以解释该逻辑操作的摘要吗?我读到它是这样转移的,但是转移了什么?
我正在做一个小项目。在谷歌搜索期间,我看到一些 java 代码。
int red = (pixel >> 16) & 0x000000FF;
但我不明白那是什么意思?任何人都可以解释该逻辑操作的摘要吗?我读到它是这样转移的,但是转移了什么?
颜色的红色分量存储为 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 之间的数字。
这是一个按位“AND”运算符。当它应用于数字FF
(十六进制)时,它将清除除最后 8 位之外的 int 的所有位。
回想一下,按位“AND”通过一个数字的二进制表示,并且只将结果中的两个操作数都有一个的位置。由于包含的 32 位掩码FF
在二进制中看起来像这样
00000000000000000000000011111111
结果的前三个字节将为零。最后一个字节(FF
全为 1)将等于第一个操作数的最后一个字节。
& - 按位与运算符
>> - 右移运算符 - 将位模式向右移动
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
例如
4 在二进制 100 中,如果你做 >>1 那将是 010 即 2
8 在二进制 1000 中,如果你做 >>1 那将是 0100 即 4
也可以看看