【问题标题】:Declaring masks for bitwise operations为按位运算声明掩码
【发布时间】:2011-11-14 15:50:35
【问题描述】:

我是这样的低级操作的新手,我希望有人能指出我在这里必须犯的明显错误。

//Input value - 00111100
//I want to get the value of the bits at indexes 1-3 i.e 0111.

byte mask = (byte)0x00001111; // This gives 17 not the 15 I'd expect 

byte shifted = (byte)(headerByte >> 3);
//shifted is 7 as expected

byte frameSizeValue = (byte)(shifted & mask); //Gives 1 not 7

看起来问题出在定义掩码的方式上,但我不知道如何解决它。

【问题讨论】:

    标签: java bit-manipulation bitmask


    【解决方案1】:

    首先0x00001111 是十六进制的,比255 大,16^3 + 16^2 + 16 + 1 = 4369byte 溢出。看看here如何表示二进制数还是直接用shifted & 15

    【讨论】:

    • 谢谢,我将二进制文件误解为 Justin 显示的十六进制。感谢您的链接。
    【解决方案2】:

    您的掩码需要是二进制 00001111,等于十六进制0x0F。

    byte mask = (byte)0x0F;
    

    【讨论】:

      【解决方案3】:

      使用 java 7 你可以创建二进制字面量

      byte binaryLit = (byte)0b00001111;
      

      0xsomenumbers 是一个十六进制文字,并且在 java7 之前不支持二进制文件。

      【讨论】:

      • 酷,我实际上正在使用 J2ME。不过改进很好。
      【解决方案4】:

      你说你想屏蔽前三位,但正如 Petar 所说,0x001111 不是位。如果要屏蔽需要用 7 屏蔽的三位

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 2018-03-25
        • 2013-04-16
        • 1970-01-01
        • 2022-06-29
        • 1970-01-01
        相关资源
        最近更新 更多