我正在准备使用 Gayle Laakman McDowell 的文本“Cracking the Coding Interview”进行面试。在涉及位操作的部分中,提供了两个函数,但我不太明白它是如何工作的。
// To clear all bits from the most significant bit through i (inclusive), we do:
int clearMSBthroughI(int num, int i) {
int mask = (1 << i) - 1;
return num & mask;
}
// To clear all bits from i through 0 (inclusive), we do:
int clearBitsIthrough0(int num, int i) {
int mask = ~(((1 << (i+1)) - 1);
return num & mask;
}
在第一个函数中,我(1 << i)
当然知道做什么,但我不确定从这个值中减去 1 会如何影响位(即(1 << i) - 1)
)。
我对第二个功能基本上有同样的困惑。减 1 有什么影响,特别是对位有什么影响((1 << (i+1))
?据我了解,((1 << (i+1))
结果是一个“on”位,向左移动 i+1 次——将其减去 1 有什么作用?
谢谢,我希望这很清楚!如果还有其他问题,请告诉我。
对于那些碰巧有我引用的文本的人,它在第 5 版的第 91 页。