将 int 变量的最后 n 位设置为零的 C 表达式

kuj*_*ist 0 c unix

换句话说,将整数变量 x 的最后 5 位设置为零,并且它必须是可移植的形式。

我试图用 << 运算符来做到这一点,但这只会将位向左移动,而不是将最后 5 位更改为零。

11001011 应该改为 11000000

M O*_*ehm 5

创建一个掩码,n如果它与您的 int 进行按位与运算,则该掩码将清除最后一个整数:

x &= ~ ((1 << n) - 1);
Run Code Online (Sandbox Code Playgroud)

该表达式1 << n将 1 按n位移动,实际上是 的 2 次方n。所以对于 5,你得到 32 或0x00000020. 减去一个,你会得到一个数字,作为n 最低位设置,在你的情况下0x0000001F。用 否定这些位,~你会得到0xFFFFFFE0其他人也贴出的掩码。与您的整数按位 AND 将仅保留掩码和您的数字共有的位,只能从第六位开始下注。