Java 按位运算的错误结果r<&书信电报;24,为什么?
我有一个枚举:Java 按位运算的错误结果r<&书信电报;24,为什么?,java,bitwise-operators,bit-shift,Java,Bitwise Operators,Bit Shift,我有一个枚举: 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; i
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;
}
}
公共枚举星型{
快速(255,255,255),
正常(190190190),
慢(120、120、120);
私人内特色;
专用星型(整数r、整数g、整数b){
int R=R您将这一事实错误地理解为负面的
您正在将四个8位值打包为32位值:
RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA
如果设置了最高有效位,即最左边的R位(即R值至少为128),则相应的32位int值为负值
但就整数值而言,这并不意味着什么。从某种意义上说,你是在滥用int数据类型,用它来存储四个8位的值。只是碰巧得到的一些32位值也被用来表示负数。为什么你认为你需要一个正值?通常情况下,如果只要位是正确的,e数是正数或负数。如果出于任何原因仍希望有正值,则必须使用long
。才能“说服”如果您认为值是正确的,您可以打印出值的十六进制表示形式。这将不会有符号,并将显示位模式与预期一致。@DanielJunglas或只是在第一位指定十六进制的int值,例如0xFF\u FF\u FF
,0xBE\u BE\u FF
等。通过e位在这里移动。问题是我想用它作为设置颜色的一种简单方法。它不是处理4个变量,而是一个…一个整数值。正如我在书籍和教程中看到的,这是处理颜色值的一种非常常见的方法。但在我的代码中,对象的颜色仍然是黑色,我想知道为什么?所以上面的代码是co是否正确?问题一定在代码中的其他地方?@Peter例如,您的“快速”星型应该为白色。如果不是,则问题在其他地方。