无符号右移和位掩码的应用

时间:2014-06-16 08:19:03

标签: java bit-manipulation

当我在通过比特屏蔽发布此问题之前浏览了许多网站时,我所理解的是它曾用于在1和0之间切换切换并且通常用于基于像素的图形项目。现在作为一个初学者真的不明白为什么我们切换开关以及如何在图形中使用它。为什么我们使用位掩码来提取位 ??

1 个答案:

答案 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。

首先,eb升级为0xF1

然后0xFFFF FFF1AND

。{
0xFF

然后它向右移4位:

0xFFFF FFF1 & 0x0000 00FF == 0x0000 00F1

然后它被转换为0x0000 00F1 >> 4 == 0x0000 000F

byte

你得到(byte) 0x0000 000F == 0x0F

编辑:没有足够时间点击“F”,最终得到了16位e == 15 ...希望修复,谢谢@Stefan!