我有一个 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/