GESP 八级 · GESP 202512 C++ 八级 第 14 题

选择题 · 答案 C · 考点:位运算

← 整套速查表 GESP 八级 全部真题

题目

当输入 $2023$ 时,下列程序的输出结果为( )。

#include <iostream>
using namespace std;

int main() {
    int x, ans = 0;
    cin >> x;
    while (x != 0) {
        x -= x & -x;
        ans++;
    }
    cout << ans << endl;
    return 0;
}
答案:C

考点

位运算 讲解 →位运算 真题汇总 →

解题思维

看到 x -= x & -x → 先想 Brian Kernighan 算法:每次消去最低位的 1。

常见错误

混淆逻辑与位运算;误以为右移是算术右移导致负数处理错误。

详细解析(节选)

考点:二进制表示|位运算

解析

程序统计整数二进制中 1 的个数。x & -x 提取最低位 1,x -= x & -x 将其清零,循环次数即 1 的个数。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断