我有一个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;
答案 0 :(得分:2)
怎么样?
unsigned int Mask = 0xffffffff;
bits = Mask >> (31 - bitloc);
在你的例子中bitloc是2: 掩码是二进制数,然后我们向右移动29次,有效地从左边增加29个零,只留下第0位和第2位作为1。
0xffffffff&gt;&gt; 29 = 0x00000007 = 000 ... 0111
答案 1 :(得分:0)
怎么样
bits |= (2 << bitloc) - 1;
当然,这只适用于bitloc <= 30
。
答案 2 :(得分:0)
我希望这应该有用,
bits |= ~((~0)<<(bitloc + 1))
答案 3 :(得分:0)
假设你想从M.S.B中的特定位置“P”设置“N”位。在给定值“X”中朝向LSB。然后解决方案将是
X = X | ((〜(~0