将i清除为0位

时间:2017-08-13 05:05:12

标签: bit-manipulation bits

我正在通过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是所有1的序列?

1 个答案:

答案 0 :(得分:2)

假设您使用的是C / C ++,h2表示由two's complement表示的带符号的32位整数。

int本身被假定为-1类型,因此等同于int。这推导如下:

0xFFFFFFFF1。反转这些位会产生0x00000001,并且添加一个会产生0xFFFFFFFE-1的两个补码表示,一个32个序列。