【发布时间】:2013-04-04 16:40:04
【问题描述】:
我正在准备使用 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 << (i+1)) 中减去 1 会产生什么影响,特别是对位的影响?据我了解,((1 << (i+1)) 产生一个“on”位,向左移动 i+1 次——将其减去 1 有什么作用?
谢谢,我希望这很清楚!如果还有其他问题,请告诉我。
对于那些偶然知道我所引用的文字的人,它在第 5 版的第 91 页上。
【问题讨论】:
标签: c bit-manipulation