📅  最后修改于: 2023-12-03 15:42:11.530000             🧑  作者: Mango
考虑以下 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;
}