我对位操作相当陌生,所以如果你能帮助我那就太棒了!我在比较两个不同的字节时明白了什么(&,|,〜,^)。我也理解(<<<)就像乘以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;
}
提前致谢!
答案 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;