题目
位运算或掩码:用 unsigned 存 RGB 分量
思路
本题把 RGB 三个 0~255 的分量打包进一个整数,并能解包还原。 打包:color = (r<<16)|(g<<8)|b;解包:用移位和掩码取出各字节。写入前先 clamp 到 0~255。
解题分析
RGB 各 8 位打包:(r<<16)|(g<<8)|b,解包用移位和 &0xFF。输出十六进制便于肉眼检查位布局。
完整程序
import java.io.*;
public class Main {
public static void main(String[] args) {
int r = 255, g = 128, b = 0;
int pack = (r << 16) | (g << 8) | b;
System.out.printf("0x%06X%n", pack & 0xFFFFFF);
System.out.println(((pack >> 16) & 0xFF) + " " + ((pack >> 8) & 0xFF) + " " + (pack & 0xFF));
}
}
运行示例
输出:
0xFF8000
255 128 0