家庭作业帮助(位操作)

时间:2017-02-24 23:10:25

标签: c bit-manipulation

我对位操作相当陌生,所以如果你能帮助我那就太棒了!我在比较两个不同的字节时明白了什么(&,|,〜,^)。我也理解(<<<)就像乘以2 ^ i位而(>>)就像是除以2 ^ i位。我试过这个,但我认为有更好的方法。

以下是问题:

编写一个函数,将整数中的一定位数设置为1,将所有其他位设置为0.应该从函数返回该值。例如,当整数x = 3和y = 8传递给函数时,函数应返回二进制数为00000000 00000000 00000111 11111000的整数。即,将位从第3位转换为第11位(3 + 8)到1,其他到0。 提示:此函数有两个参数:起始位数和起始位计数的位数。应使用按位添加和移位。

这是我到目前为止所拥有的:

int function(int startBit, int numBits){
   int num = 0;
   int num1 = 1;
   int i;

   for(i = startBit; i < startBit+numBits; i++){
          num = num | num1 << i;

   }
   return num;
}

提前致谢!

2 个答案:

答案 0 :(得分:0)

通常有点麻烦:

((1 << numBits) - 1) << startBit

但我不确定是否满足您的“按位添加和转换应该使用”限制。

答案 1 :(得分:0)

这个解决方案有点慢,但符合要求:

// First, create the number of 1 bits needed
int result = 0;
for (i = 0; i < numBits; ++i)
  result = (result << 1) + 1;

// Then shift the 1 bits to the correct position
result <<= startBit;