【发布时间】:2017-08-13 05:05:12
【问题描述】:
我正在完成《Cracking the Coding Interview》,其中一种位操作技术如下:
要清除从 i 到 0(含)的所有位,我们取一个全为 1(即 -1)的序列并将其左移 i + 1 位。这给了我们一个 1 序列(在最高有效位中),然后是 i 0 位。
int clearBitsIthrough0(int num, int i){
int mask = (-1 << (i + 1));
return num & mask;
}
-1 怎么是全 1 的序列?
【问题讨论】:
-
引用假定two's complement 表示
-
考虑一下如果你增加“所有的”会发生什么。
x + 1 = 0应该意味着x = -1。
标签: bit-manipulation bits