在 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