📜  门| GATE CS 2011 |问题30(1)

📅  最后修改于: 2023-12-03 15:42:11.530000             🧑  作者: Mango

GATE CS 2011 | 问题30

问题

考虑以下 C++ 函数:

bool foo(unsigned int x){
    return (x & (x-1)) == 0;
}

此函数将对输入的无符号整数 x 返回 true,如果 x 是 2 的幂,则返回 false。

以下哪个选项最好说明了这个函数的功能?

A. x 的所有位都是 1。 B. x 能被 2 整除。 C. x 的二进制表示中恰有一位是 1。 D. x 的二进制表示中有两个相邻的 1。

(A) A

(B) B

(C) C

(D) D

解答

题目要求函数 foo 在输入的无符号整数 x 是 2 的幂时返回 true,否则返回 false。

函数的实现 (x & (x-1)) == 0 判断 x 是否是 2 的幂。

题目中的选项 A 表示所有位都是 1,这不一定是 2 的幂,因此错误。选项 B 表示能被 2 整除,这只有在 x 是 2 的幂时成立,因此不足以描述函数的功能。选项 C 表示 x 的二进制表示中恰有一位是 1,但这也不一定是 2 的幂,因此错误。选项 D 表示 x 的二进制表示中有两个相邻的 1,这只有在 x 不是 2 的幂时成立,因此错误。

因此,正确答案为 C。

代码实现
bool foo(unsigned int x){
    return (x & (x-1)) == 0;
}