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

时间:2014-05-06 19:05:40

标签: c unix

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

我试图用<<<<<<<<运算符,但只将位移到左侧,而不是将最后5位更改为零。

11001011应更改为11000000

3 个答案:

答案 0 :(得分:2)

创建一个掩码,如果它与你的int进行按位与运算,那么会消隐掉最后n个整数:

x &= ~ ((1 << n) - 1);

表达式1 << nn个位置移位1,实际上是n的两倍。所以对于5,你得到32或0x00000020。减去一个,你得到一个数字,作为n最低位设置,在你的情况0x0000001F。使用~取消这些位,然后获得其他人发布的掩码0xFFFFFFE0。与您的整数进行按位AND将仅保留掩码和您的数字共有的位,这样只能打开第六位的位。

答案 1 :(得分:1)

对于32位整数,您应该能够使用&amp; amp;屏蔽这些位。 (按位和)运算符。

x & 0xFFFFFFE0.

http://en.wikipedia.org/wiki/Bitwise_operation#AND

答案 2 :(得分:0)

您可以使用按位和&来实现此

int x = 0x00cb;
x = x & 0xffe0;

这保持较高位并将较低位设置为零。