首先,如果这个问题最终成为重复,请道歉。
我正在尝试使用Java中的一些内容。而且我需要在单个变量中获得笨拙的位数。所以我仍然使用一个字节,但只想存储7位或4位。
所以假设我有一个类似'1101 0110'的字节,我希望最后得到'0110'。我见过有人这样做:(字节)(b& 0x0F)其中b是一个字节。
所以我理解这里发生的事情是:b(1101 0110)与0x0F(0000 1111)进行AND运算,然后转为int并转换回字节。
1101 0110 &
0000 1111
---------
0010 0110 -> 0000 0000 0000 0000 0000 0000 0010 0110 -> 0010 0110
在这个例子中,我没有得到4位,我得到了整个字节而不是我开始的那个。我误解了如何按位和工作吗? 我很确定这会以某种方式起作用,但我不知道如何。 有人可以解释一下吗?
我认为执行以下操作会产生更可靠的结果: (字节)((b <&lt; 4)&gt;&gt;&gt; 4) 这样我就可以确保前4位始终为0。
答案 0 :(得分:0)
您的假设不正确以及提供示例:AND始终可靠。更经常使用它的原因是它更灵活。这样你不仅可以用最高位替换零,而且可以用你想要的任何位替换相应的掩码。同样使用shift你应该特别注意使用AND时不需要的符号位。