Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按位运算的错误结果r<&书信电报;24,为什么?_Java_Bitwise Operators_Bit Shift - Fatal编程技术网

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例如,您的“快速”星型应该为白色。如果不是,则问题在其他地方。