背景:我有像这样的二进制表示一个32位的整数:改变一个32位的整数的特定位中的Java
1111 1111 0000 0000 0000 0000 1111 1111
注:这是在ARGB的二进制表示值为Color.BLUE
。我正在使用它来说明目的,但它与我试图解决的情况有关。
问题:我试图让其二进制表示看起来像这样改变的高位:
1000 0000 0000 0000 0000 0000 1111 1111
或者更简单地说,前八点的高位应该改变像这样:
1111 1111 -> 1000 0000
目前的解决方案尝试:到目前为止,我已经成功地通过屏蔽掉前八点的高位,而日恩“并称”使用逐所需的值“或”,像这样:
int colourBlue = Color.BLUE.getRGB(); // equal to binary value at top of question
int desiredAlpha = (0x80 << 24); // equal to 1000 0000 0000 0000 0000 0000 0000 0000
// Mask out the eight high order bits, and add in the desired alpha value
int alteredAlphaValue = (colourBlue & 0x00FFFFFF) | desiredAlpha;
虽然这样做目前的工作,无可否认它已经因为我的计算机体系结构类一段时间,我没有很多的经验但仍然使用按位运算符和较低级别的位操作。
我的问题:我的解决方案是完成此任务的正确方法吗?如果它在某种程度上不合适(或者只是简单的“哑”),那么实现改变特定位的目标是更好的(或正确的)方法?
你知道你的解决方案也会消灭红色和绿色的部分,如果有的话,对吧? –
如果您的位按每个8位排列为ARGB,则您的方法是正确的。 –
@ user2864740,如果它们的起始位置是0x00,则您的方法不会将高位更改为0x80。 –