繁体   English   中英

按位操作说明

[英]Explanation of bitwise operation

我有一个非常简单的问题:我想知道此java操作的含义。 我是Java的初学者,无法理解它的作用。 我知道这是一个存储颜色的打包int

(alpha << 24) | (red << 16) | (green << 8) | blue

另一个问题:我想从0xFFFFFFFF值变为RGB类型的颜色,如何将打包的int分为RGB通道?

关于第一个问题:

该表达式将四个8位量加载到一个32位int中。 尽管通常这种布尔操作是用无符号的int进行的,以避免复杂化,但我不会在这里介绍。

您所显示的行是将alpha分量的值(例如其8位)向左移动24位,以创建一个结果,其中alpha占据了4字节(32位)整数的高位字节。

然后,它将红色分量向左移动16位(增加其数值的二进制数量级),然后对该移位操作的结果进行逻辑或运算为存储有alpha值的32位整数(合并该值)以占据第三个字节。 那时的结果是,前两个字节将具有alpha和red值,依此类推。

关于第二个问题:

您可以反转过程并使用布尔运算符:

unsigned int v = 0xff557788;
int blue = v & 0xff;
int green = v >> 8 & 0xff;
int red = v >> 16 & 0xff;
int alpha = v >> 24 & 0xff;

在此示例中,我们将字段右移8的倍数以将不同的字节转换为最低字节,然后对0xff进行掩码(例如,逻辑与)与之相对,以获得不包括高阶3个字节的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM