我应该创建一个执行此操作的函数:(函数中的代码是我到目前为止所拥有的!)
* 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));
}
除了输入为0
(upperBits(0)
)之外,该函数每次都有效,当输出为0xffffffff
时输出为0
。不知道该怎么做。
答案 0 :(得分:0)
由于您试图自己解决这个问题,我会提供一些线索。这是一种特殊的方法。可能还有其他同样好的方法可以做到这一点。
此函数将除了以32
的值作为参数:
int upperBits(int n) {
return ~(0xFFFFFFFFU >> n);
}
这对n == 32
不起作用,因为C会忽略32
的转变。你可以通过将升级分成两个加起来n
的部分来解决这个问题。换句话说:
return ~((0xFFFFFFFFU >> x) >> y);
x
和y
加起来为n
。通过使用允许的运算符操作x
,有一些非常简单的方法可以提出y
和n
。您也可以内联执行此操作,而不必声明变量x
和y
。