在C中设置最后n位

时间:2015-01-07 13:03:10

标签: c bit-manipulation

我不想将任何给定数字的最后n位设置为1.我有一个数字(在它的长度上是可变的)和一个变量n。

示例:

12 (dec) set last 2 bits
Output: 15

现在基本操作应该是:

return 0b11 | 12;

但是我如何才能制作0b11变量?

谢谢!

4 个答案:

答案 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