我想把一个字节的最后三位设置为一个特定的值实现这一目标的最佳方法是什么?
我至少可以想出两个解决方案…假设我有以下字节:1101010,并希望将最后三个位设置为011。
解决方案1:
1101 0110
&1111 1000 //and with mask to clear last three bits
|0000 0011 //add the target bits
解决方案2:
1101 0110 >> 3 //shift right to remove last three
0001 1010 << 3 //shift left to clear last three
|0000 0011 //add target bits
有没有更好/更短/更有效的方法?
最佳答案
最好的办法是说
b = (b & ~7u) | 3
因为
3=0...011
和7u=0..111
是二进制的,而7u
的补码是~7u=11...1000
,所以该操作可以执行您想要的操作。它首先清除最后三位(通过执行b & ~7u
),然后设置第一位和第二位(通过执行逐位或使用3
)。