0 #30. 程序阅读(进制与位运算篇)
程序阅读(进制与位运算篇)
CSP 2023 提高级第一轮程序阅读(一)
1 #include <iostream>
2 using namespace std;
3
4 unsigned short f(unsigned short x) {
5 x ^= x << 6;
6 x ^= x >> 8;
7 return x;
8 }
9 int main() {
10 unsigned short x;
11 cin >> x;
12 unsigned short y = f(x);
13 cout << y << endl;
14 return 0;
15 }
假设输入的 是不超过 的自然数,完成下面的判断题和单选题:
判断题
- 当输入非零时,输出一定不为零。() {{ select(1) }}
TF
- 将
f函数的输入参数的类型改为unsigned int,程序的输出不变。() {{ select(2) }}
TF
- 当输入为 时,输出为 。(){{ select(3) }}
TF
- 当输入为 时,输出为 。(){{ select(4) }}
TF
单选题
- 当输入为 时,输出为()。{{ select(5) }}
- 当输入为 时,执行完第 行后
x的值为()。{{ select(6) }}
CSP 2022 入门级第一轮程序阅读(一)
01 #include <iostream>
02
03 using namespace std;
04
05 int main()
06 {
07 unsigned short x, y;
08 cin >> x >> y;
09 x = (x | x << 2)& 0x33;
10 x = (x | x << 1)& 0x55;
11 y = (y | y << 2)& 0x33;
12 y = (y | y << 1)& 0x55;
13 unsigned short z = x | y << 1;
14 cout << z << endl;
15 return 0;
16 }
假设输入的 均是不超过 的自然数,完成下面的判断题和单选题:
判断题
- 删去第 行与第 行的
unsigned,程序的行为不变。() {{ select(7) }}
TF
- 将第 行与第 行的
shor改为char,程序的行为不变() {{ select(8) }}
TF
- 程序总是输出一个整数 。(){{ select(9) }}
TF
- 当输入为
2 2时,输出为 。(){{ select(10) }}
TF
- 当输入为
2 2时,输出为 。(){{ select(11) }}
TF
单选题
- 当输入为
13 8时,输出为()。{{ select(12) }}
CSP 2021 入门级第一轮程序阅读(一)
01 #include <iostream>
02 using namespace std;
03
04 int n;
05 int a[1000];
06
07 int f(int x)
08 {
09 int ret = 0;
10 for (; x; x &= x - 1) ret++;
11 return ret;
12 }
13
14 int g(int x)
15 {
16 return x & -x;
17 }
18
19 int main()
20 {
21 cin >> n;
22 for (int i = 0; i < n; i++) cin >> a[i];
23 for (int i = 0; i < n; i++)
24 cout << f(a[i]) + g(a[i]) << " ";
25 cout << endl;
26 return 0;
27 }
- 输入的 等于 时,程序 不会 发生下标越界。( ) {{ select(13) }}
- 正确
- 错误
- 输入的
a[i]必须全为正整数,否则程序将陷入死循环。() {{ select(14) }}
- 正确
- 错误
- 当输入为
5 2 11 9 16 10时,输出为3 4 3 17 5。( ) {{ select(15) }}
- 正确
- 错误
- 当输入为
1 511998时,输出为18。( ) {{ select(16) }}
- 正确
- 错误
- 将源代码中 函数的定义( 行)移到
main函数的后面,程序可以正常编译运 行。( ) {{ select(17) }}
- 正确
- 错误
- 当输入为
2 -65536 2147483647时,输出为( )。 {{ select(18) }}
65532 3365552 3265535 3465554 33
四
1 #include <bits/stdc++.h>
2 using namespace std;
3 int x, y;
4 unsigned int n;
5 int main() {
6 cin >> n >> x >> y;
7 unsigned int mask = 0xff;
8 int x8 = x << 3;
9 int y8 = y << 3;
10 unsigned int nx = (n >> x8) & mask, ny = (n >> y8) & mask;
11 n &= (~(mask << x8));
12 n &= (~(mask << y8));
13 n |= (nx << y8);
14 n |= (ny << x8);
15 cout << "0x";
16 cout << std::hex << n << endl;
17 return 0;
18 }
假设输入的 是 位无符号整数范围内的整数, 是不超过 的自然数,完成下面的判断题和单选题。
判断题
- 代码中
mask变量的值转化为二进制的低 位结果是 ()。 {{ select(19) }}
TF
- 当输入 的时候, 表示 中最低八位对应的字节的数据。( ) {{ select(20) }}
TF
- 去掉程序第 行至第 行中
(~(mask << x8))和(~(mask << y8))两处中的最内层 括号不会改变程序的结果。( ) {{ select(21) }}
TF
单选题
- 当输入为
15078 0 1时,变量 的值分别为多少?( ) (提示:十进制数 与十六进制数 相同) {{ select(22) }}
- 当输入为
23270 0 1时,输出为多少?( ) (提示:十进制数 与十六进制数 相同) {{ select(23) }}
- 以下哪一个变量的类型修改可能影响程序的输出?( ) {{ select(24) }}
- 将 修改为
unsigned int类型。 - 将 修改为
short类型。 - 将 修改为
int类型。 - 将 修改为
unsigned long long类型。
相关
在以下作业中: