我有一个枚举:
public enum STAR_TYPE {
FAST(255, 255, 255),
NORMAL(190, 190, 190),
SLOW(120, 120, 120);
private int color;
private STAR_TYPE(int r, int g, int b) {
int R = r << 24;
int G = g << 16;
int B = b << 8;
color = R | G | B | 0xff;
}
public static STAR_TYPE getRandomType() {
return values()[MathUtils.random(0, values().length - 1)];
}
public int getColor() {
return color;
}
}
我想将RGBA值转换为透明度始终为255的整数。为此,我正在使用按位运算。但是r << 24不起作用。它返回错误的结果。
对于255 r << 24应该返回4278190080,但它返回-16777216。
对于190 r << 24应该返回3187671040,但它返回-1107296256。
仅适用于120 r << 24会返回2013265920的正确结果。
我发现计算得出的值为带符号2的补码的小数。很高兴知道,但我从未要求过。我想拥有积极的价值。如何获得所需的值?我很困惑。
您正在误解这是负面的意义。
您正在将四个8位值打包为一个32位值:
RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA
如果设置了最高有效位,即最左边的R位(即,您的R值至少为128),则相应的32位int值为负。
但是,就整数值而言,这实际上并不意味着任何东西。从某种意义上讲,您正在使用int数据类型存储四个8位值来滥用它。碰巧的是,由此产生的某些32位值也用于表示负数。