Java中的位操作主要是和
首先,如果这个问题最终是重复的,请道歉 我正在尝试用Java中的bits做一些事情。我需要在一个变量中得到大量的位。所以我仍然使用一个字节,但只想存储7位或4位 假设我有一个类似于'11010110'的字节,我想在末尾得到'0110'。我见过有人这样做:(byte)(b&0x0F),其中b是字节 因此,我理解这里发生的事情的方式是:b(11010110)与0x0F(0000 1111)进行and运算,然后转换为int并转换回byteJava中的位操作主要是和,java,bitwise-operators,Java,Bitwise Operators,首先,如果这个问题最终是重复的,请道歉 我正在尝试用Java中的bits做一些事情。我需要在一个变量中得到大量的位。所以我仍然使用一个字节,但只想存储7位或4位 假设我有一个类似于'11010110'的字节,我想在末尾得到'0110'。我见过有人这样做:(byte)(b&0x0F),其中b是字节 因此,我理解这里发生的事情的方式是:b(11010110)与0x0F(0000 1111)进行and运算,然后转换为int并转换回byte 1101 0110 & 0000 1111 ---
1101 0110 &
0000 1111
---------
0010 0110 -> 0000 0000 0000 0000 0000 0000 0010 0110 -> 0010 0110
在这个例子中,我没有得到4位,我得到的是整个字节,也不是我开始使用的。我是否误解了按位and的工作原理?
我很确定这是可行的,但我不知道怎么做。
有人能解释一下吗?
我认为这样做会产生更可靠的结果:
(字节)((b>4)
通过这种方式,我可以确保前4位始终为0。您的假设是不正确的,并且提供了示例:并且始终是可靠的。之所以更频繁地使用它,是因为它更灵活。通过这种方式,您不仅可以将最高位替换为零,还可以将任何您想要的位替换为仅提供适当的掩码。还可以使用sh如果您在使用AND时需要额外注意不必要的符号位。
1101010&0000 1111=0010010 0110
-这个等式是错误的。是的,1101010&0000 1111=0000 0110
。为什么?如果两个位都是相同的,那么不需要和=1?或者我在想别的什么?这是异或,而不是和。@Atspulgs
仅当两位在所有其他情况下均为1,0时,结果为1。