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

将int变量的最后n位设置为零的C表达式,c,unix,C,Unix,换句话说,将整数变量x的最后5位设置为零,并且必须是可移植的形式 我试着用来做,对于32位整数,应该可以使用&(按位and)运算符屏蔽掉这些位 x & 0xFFFFFFE0. 您可以为此使用按位和& int x = 0x00cb; x = x & 0xffe0; 这将保留较高的位并将较低的位设置为零。创建一个掩码,如果最后的n整数是按位与整数进行and运算,则该掩码将其清空: x &= ~ ((1 << n) - 1); x&=~(1)当n=sizeof

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


我试着用来做,对于32位整数,应该可以使用&(按位and)运算符屏蔽掉这些位

x & 0xFFFFFFE0.

您可以为此使用按位和
&

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

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

创建一个掩码,如果最后的
n
整数是按位与整数进行and运算,则该掩码将其清空:

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

x&=~(1)当n=sizeof(int)@WingerSendon时失败:你的意思是当
n==CHAR\u BIT*sizeof(int)
时?是的,但是屏蔽掉一些等于或大于值位宽度的位会将其设置为零。如果需要,这种特殊情况很容易被捕获。