C程序设置k个低阶位

C程序设置k个低阶位,c,bit-manipulation,bit,C,Bit Manipulation,Bit,对于一个32位整数,我如何在C中设置k个低阶位 int位掩码=1; int bitmask = 1; for (ix = 0; ix < k; ++ix) { C = C | bitmask; bitmask <<= 1; } 对于(ix=0;ix

对于一个32位整数,我如何在C中设置k个低阶位

int位掩码=1;
int bitmask = 1;
for (ix = 0;  ix < k;  ++ix)
{
    C = C | bitmask;
    bitmask <<= 1;
}
对于(ix=0;ix位掩码要设置
n
k
中的最低有效位,可以使用算术:

k |= (1 << n) - 1;

k |=(1

设置低k位:

while (k) {
    k--;
    num |= (1<<k);
}
while(k){
k--;

num |=(1假设您想要设置32位整数x的k个最低位,我相信这会起作用:

if( k > 0 ) {
    x |= (0xffffffffu >> (32-k))
}

这将清除现有的位。如果
n
等于
int
类型的宽度,则此操作将失败。@尼尔G:因为移位量等于或大于类型的宽度是未定义的行为,事实上,这在常见平台上确实会失败。@尼尔G:x86(其中,将32位值移位32将保持数字不变。)
1ull
仅在
n
小于
unsigned long
的宽度时有效(至少64)。此问题假设
n+1很好,但我会使用无符号文本
0xffffffu
,以确保编译器不会尝试复制符号位。如果我在
0xffffffu
处咯咯笑一下可以吗?:p请注意,对于
k=0
(将32位操作数移位32位或更多位是未定义的行为)。@user一点也不。它会或有0,对低位不做任何操作。
x |=~(0xffffff@Richard-谢谢你的建议。我已经更新了我的答案。