我相信你根本不明白发生了什么。第一行已经不正确:
它说,“在红色的情况下,将一个 8 位掩码向左移动 16 位,反转它(使用 ~ 运算符),然后用 RGB 值“和”(&)这个掩码”
意思是
8 bit mask of ones: 0xFF (00000000 00000000 00000000 11111111)
shift left 16 bits: 0xFF << 16 (giving you 00000000 11111111 00000000 00000000)
invert it : ~ (0xFF << 16) (giving you (11111111 00000000 11111111 11111111)
& this mask with RGB value: result = pixel & (~(0xFF << 16))
result
是第pixel
17-24 位清零。
这是设置“红色”值的第一步(是的,还有后续步骤,如您的作业中所述)pixel
我不确定这是否是您的意图,但您开发的内容与您的问题无关:您没有设置红色值,而是似乎获得了红色值。
但是,您开发的内容仍然远非正确。例如,您应该有一个类似的掩码,第 17-24 位为 1,其他位为 0,然后 & 具有此掩码的像素,然后将剩余值(位于第 17-24 位)移动到第 0-7 位。
我不会给你真正的答案,因为这是你从中学习的工作。但是我相信我给出的提示是绰绰有余的。