使函数upperBits

时间:2014-09-16 23:31:31

标签: bitwise-operators bits bit-shift

我应该创建一个执行此操作的函数:(函数中的代码是我到目前为止所拥有的!)

 * upperBits - pads n upper bits with 1's
 *  You may assume 0 <= n <= 32
 *  Example: upperBits(4) = 0xF0000000
 *  Legal ops: ! ~ & ^ | + << >>
 *  Max ops: 10
 *  Rating: 1
 */
int upperBits(int n) {

   int x;
   x = (x << n) - 1;
    return (x << (32-n));
}

除了输入为0upperBits(0))之外,该函数每次都有效,当输出为0xffffffff时输出为0。不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

由于您试图自己解决这个问题,我会提供一些线索。这是一种特殊的方法。可能还有其他同样好的方法可以做到这一点。

此函数将除了32的值作为参数:

int upperBits(int n) {
    return ~(0xFFFFFFFFU >> n);
}

这对n == 32不起作用,因为C会忽略32的转变。你可以通过将升级分成两个加起来n的部分来解决这个问题。换句话说:

return ~((0xFFFFFFFFU >> x) >> y);

xy加起来为n。通过使用允许的运算符操作x,有一些非常简单的方法可以提出yn。您也可以内联执行此操作,而不必声明变量xy