c - 在 uint 中动态设置多个位

标签 c bit-shift

我有一个 unsigned int,它包含一系列位和特定的位位置。

现在我想将所有位从该位位置“向下”设置为 1。如何在没有循环的情况下简单地实现这一点?

例子:

unsigned int bitloc=2;
unsigned int bits=??;           //must become 0000 0111

unsigned int bitloc=4;
unsigned int bits=??;           //must become 0001 1111

创建结果的等效函数:

bits=0;
for (unsigned int i=0; i<=bitloc; i++)
    bits|=1<<i;

最佳答案

怎么样?

unsigned int  Mask =   0xffffffff;
  bits = Mask >> (31 - bitloc);

在您的示例中,bitloc 是 2: 掩码是一个二进制数,然后我们将它右移 29 次,有效地从左边添加 29 个零,只留下位零、位一和位二作为一。

0xffffffff >> 29 = 0x00000007=000...0111

关于c - 在 uint 中动态设置多个位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25637032/

相关文章:

c - 如何在C中比较节点而不添加重复项?

c - netfilter - 如何在内核模块中指定队列号?

c - 如何使用预定义掩码生成值

java - Python 位移到 java

c - 将多个字符串分别放入一个数组中

c - getopt_long() 的 longindex 始终为 0

c - 使用 ubuntu 执行迷你 shell

c - 在 C 中检查设置位的非常快速的方法

C++ 从枚举值中获取位移位

c - 遍历char数组,打印每个char的位(以C表示)