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 }假设输入的 $x,y$ 均是不超过 $15$ 的自然数,完成下面的判断题和单选题:
判断题
1. 删去第 $7$ 行与第 $13$ 行的 unsigned,程序行为不变。 2. 将第 $7$ 行与第 $13$ 行的 short 均改为 char,程序行为不变。 3. 程序总是输出一个整数“0”。 4. 当输入为 2 2 时,输出为 10。 5. 当输入为 2 2 时,输出为 59。
单选题
6. 当输入为 13 8 时,输出为( )。
看到 x=(x|x<<2)&0x33 等式 → 先想 Bit Merge 位交错
char 范围小易溢出;误以为展宽后全零
考点:Bit Merge 位交错|溢出判断
输入两个 4 位自然数,分别将其位展宽至 8 位偶数位和奇数位后交错合并输出。