Bit manipulation 清除i到0位

Bit manipulation 清除i到0位,bit-manipulation,bits,Bit Manipulation,Bits,我正在破解编码面试,其中一种比特操作技术如下: 为了清除从i到0(包括)的所有位,我们取一个所有1的序列(即-1)并将其左移i+1位。这为我们提供了一个1s序列(在最高有效位中),后跟i 0位 int clearBitsIthrough0(int num,int i){ int mask=(-1假设您使用的是C/C++,int表示一个有符号的32位整数,用表示 -1本身被假定为int类型,因此等同于0xFFFFFFFF。其推导如下: 1是0x00000001。位的倒数得到0xfffffe,加上一

我正在破解编码面试,其中一种比特操作技术如下:

为了清除从i到0(包括)的所有位,我们取一个所有1的序列(即-1)并将其左移i+1位。这为我们提供了一个1s序列(在最高有效位中),后跟i 0位

int clearBitsIthrough0(int num,int i){

int mask=(-1假设您使用的是C/C++,
int
表示一个有符号的32位整数,用表示

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


1
0x00000001
。位的倒数得到
0xfffffe
,加上一个就得到了
-1
的两个补码表示:
0xFFFFFFFF
,一个32位的序列。

假设您使用的是C/C++,
int
表示一个用符号表示的32位整数

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


1
0x00000001
。位的倒数给出
0xfffffe
,加上一个会得到
-1
的两个补码表示:
0xFFFFFFFF
,一个32个一的序列。

引用假设一个表示考虑如果你增加“所有的一个”会发生什么.
x+1=0
应表示
x=-1
。该引号假设一个代表性考虑如果将“所有的”递增会发生什么.
x+1=0
应该意味着
x=-1
。如果您不介意后续操作:为什么要将1添加到i?我正在处理一个简单的i=1的情况,1位移位似乎是清除1位所需的全部,但是这个公式将使您移位2。@EternalStudent如果i=1,目标是清除位1到0。我猜Gayle is零索引从LSB开始的位(最低有效位).
-1如果您不介意后续操作:为什么要将1添加到i?我正在处理一个简单的i=1的例子,1位移位似乎是清除1位所需的全部,但是这个公式会让您移位2。@EternalStudent如果i=1,目标是清除位1到0。我想Gayle是从LSB开始对位进行零索引(最低有效位)。
-1
int clearBitsIthrough0(int num, int i){
    int mask = (-1 << (i + 1));
    return num & mask;
}