C程序设置k个低阶位
对于一个32位整数,我如何在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
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-谢谢你的建议。我已经更新了我的答案。