使用按位运算符生成特定位模式

时间:2013-06-01 02:07:43

标签: c logic bit-manipulation

在这里,我想生成一个位模式,以便从位置n开始设置1个等于p的数字。 数字从0 to 31开始编号。 以下是我的所作所为。

int bitPattern(int n, int p) {
    int hex, num1, num2;
    hex = 0x80000000;
    num1 = (hex >> (31 - p));
    num2 = (hex >> (31 - (n+p)));
    return num1 ^ num2;
}

示例:

bitPattern(6, 2) should return 
..000011111100

使用较少运营商的任何替代解决方案?

1 个答案:

答案 0 :(得分:5)

你可以这样做:

return ((1<<n)-1)<<p;

要使n位于零位置,请计算(2^n)-1;回想一下2^n1<<n,因此表达式变为((1<<n)-1)。现在,您需要在后面添加p个零,因此请将结果移至p