У меня есть перечисление:
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 не работает. Это возвращает неправильные результаты. </p>
Для 255 r << 24 должен возвращать 4278190080, но он возвращает -16777216. </p>
Для 190 r << 24 должен возвращать 3187671040, но он возвращает -1107296256. </p>
Только для 120 r << 24 возвращает правильный результат 2013265920. </p>
Я обнаружил, что рассчитанные значения являются десятичными знаками от дополнения со знаком 2. Приятно знать, но я никогда не просил об этом. Я хочу иметь положительную ценность. Как я могу получить нужные значения? Я в замешательстве.