我不想将任何给定数字的最后n位设置为1.我有一个数字(在它的长度上是可变的)和一个变量n。
示例:
12 (dec) set last 2 bits
Output: 15
现在基本操作应该是:
return 0b11 | 12;
但是我如何才能制作0b11变量?
谢谢!
答案 0 :(得分:3)
试试这个:
int SetLastBits(int value,int numOfBits)
{
return value | ((1<<numOfBits)-1);
}
答案 1 :(得分:3)
你可以这样做:
uint32_t set_last_n_bits(uint32_t x, uint32_t bits)
{
return x | ((1U << bits) - 1U);
}
这也是一个相对罕见的情况,宏可能是合理的,因为它可以使用不同的整数类型。
答案 2 :(得分:3)
您可以通过以下方式将数字的最后n位设置为1:
int num = 5; // number of bits to set to 1
int val = <some_value>;
val |= (1 << num) - 1;
答案 3 :(得分:2)
正如所有其他人都展示了相同的方法,我将展示另一种方法
int value;
//...
value |= ~( ~0u << n );
这是一个示范程序
#include <stdio.h>
int set_bits( int x, size_t n )
{
return x | ~( ~0u << n );
}
int main(void)
{
int x = 12;
printf( "%d\t%d\n", x, set_bits( x, 2 ) );
return 0;
}
输出
12 15