CSP 2023 提高级第一轮 CSP-S 2023初试题 程序阅读第一题解析

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)  

一、程序阅读

#include <iostream>
using namespace std;

unsigned short f(unsigned short x) {
    x ^= x << 6;
    x ^= x >> 8;
    return x;
}
int main() {
    unsigned short x;
    cin >> x;
    unsigned short y = f(x);
    cout << y << endl;
    return 0;
}

二、题目分析

假设输入的 x 是不超过 65535 的自然数,完成下面的判断题和单选题:

判断题

1. 当输入非零时,输出一定不为零。(对)

【输入非零,说明x的二进制形式中一定有一个1,原本最右边的1对应左移之后的那一位一定是0,所以执行第一次后一定还有1;第二次同理,执行完第一次的到的数,在右移之前最左边的1对应右移之后的那一位一定是0,所以执行完第二次之后依然有1,故大于0】

2. (2 分)将 f 函数的输入参数的类型改为 unsigned int,程序的输出不变。(错)

【改成unsigned int 类型之后,执行第一步后本来应该消失的高位却移到后面参与运算,改变了第一次的结果;第二次右移8位时,第一次运算结果多余部分的前8位移了回来,参与了运算,直接改变了结果】

3. 当输入为 65535 时,输出为 63。(对)

【直接计算,^表示异或运算】

4. 当输入为 1 时,输出为 64。(错)

【答案是65】

单选题

1. 当输入为 512 时,输出为(B)。

A. 33280

B. 33410

C. 33106

D. 33346

答案为33410】

2. 当输入为 64 时,执行完第 5 行后 x 的值为(D)。

A. 8256

B. 4130

C. 4128

D. 4160

注意是执行完第 5 行】

看不懂评论区见,大家一起解答,有问题请反应~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值