在 C 中设置最后 n 位
Set last n bits in C
我不想将任何给定数字的最后 n 位设置为 1。我有一个数字(其长度是可变的)和一个变量 n。
示例:
12 (dec) set last 2 bits
Output: 15
现在的基本操作应该是这样的:
return 0b11 | 12;
但是如何使 0b11 的长度可变?
谢谢!
试试这个:
int SetLastBits(int value,int numOfBits)
{
return value | ((1<<numOfBits)-1);
}
你可以这样做:
uint32_t set_last_n_bits(uint32_t x, uint32_t bits)
{
return x | ((1U << bits) - 1U);
}
这也是一种相对罕见的情况,其中宏可能是合理的,因为它可以处理不同的整数类型。
您可以通过以下方式将数字的最后n位设置为1:
int num = 5; // number of bits to set to 1
int val = <some_value>;
val |= (1 << num) - 1;
因为所有其他人都展示了相同的方法,所以我将展示另一种方法
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
我不想将任何给定数字的最后 n 位设置为 1。我有一个数字(其长度是可变的)和一个变量 n。
示例:
12 (dec) set last 2 bits
Output: 15
现在的基本操作应该是这样的:
return 0b11 | 12;
但是如何使 0b11 的长度可变?
谢谢!
试试这个:
int SetLastBits(int value,int numOfBits)
{
return value | ((1<<numOfBits)-1);
}
你可以这样做:
uint32_t set_last_n_bits(uint32_t x, uint32_t bits)
{
return x | ((1U << bits) - 1U);
}
这也是一种相对罕见的情况,其中宏可能是合理的,因为它可以处理不同的整数类型。
您可以通过以下方式将数字的最后n位设置为1:
int num = 5; // number of bits to set to 1
int val = <some_value>;
val |= (1 << num) - 1;
因为所有其他人都展示了相同的方法,所以我将展示另一种方法
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