I이 수행하는 기능을 할 예정입니다 : (함수의 코드가 지금까지있어 것입니다!)함수를 만드는 것은 upperBits
* 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)
)이면 0
일 때 출력은 0xffffffff
입니다. 이것을하는 방법을 모른다.
int x; 뒤에 if (n == 0) return 0;을 삽입 할 수 있습니다. – lurker
if 문은 비트 연산자 만 사용할 수 없습니다. – drleifz
먼저 가지고있는 것을 수리해야합니다. 'x'가 국부적으로 선언되고, 초기화되지 않았을 때 확실히 좋지 않을 것입니다. 그리고 여러분은'(x << n) - 1' 식에서 그것을 사용하고 있습니다. 아마도'x'는 이러한 경우에 당신을 위해'0'을 기본값으로 사용하지만, 확실히 문제입니다. 문제는 C에서'0xFFFFFFFF << 32'가'0xFFFFFFFF' (''32'는 무시됩니다)라는 재미있는 행동을 강조합니다. – lurker