当我在通过比特屏蔽发布此问题之前浏览了许多网站时,我所理解的是它曾用于在1和0之间切换切换并且通常用于基于像素的图形项目。现在作为一个初学者真的不明白为什么我们切换开关以及如何在图形中使用它。为什么我们使用位掩码来提取位 ??
答案 0 :(得分:3)
答案在于JLS。第5.6.2节:
应用扩展基元转换(第5.1.2节)来转换以下规则指定的一个或两个操作数:
- 如果任一操作数的类型为double,则另一个操作数将转换为double。
- 否则,如果任一操作数的类型为float,则另一个操作数转换为float。
- 否则,如果任一操作数的类型为long,则另一个操作数将转换为long。
- 否则,两个操作数都将转换为int。
最后一点是有意义的。这意味着在执行轮班操作之前,b
都会转换为int
。
因此,曾b
的{{1}}被提升为0xF1
。
然后执行班次:
0xFFFF FFF1
然后投放到0xFFFF FFF1 >>> 4 == 0x0FFF FFFF
:
byte
你得到(byte) 0x0FFF FFFF == 0xFF
。
b == -1
为15。
首先,e
从b
升级为0xF1
。
然后0xFFFF FFF1
与AND
:
0xFF
然后它向右移4位:
0xFFFF FFF1 & 0x0000 00FF == 0x0000 00F1
然后它被转换为0x0000 00F1 >> 4 == 0x0000 000F
:
byte
你得到(byte) 0x0000 000F == 0x0F
编辑:没有足够时间点击“F”,最终得到了16位e == 15
...希望修复,谢谢@Stefan!