#30. 程序阅读(进制与位运算篇)

程序阅读(进制与位运算篇)

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 }

假设输入的 nn3232 位无符号整数范围内的整数,x,yx,y 是不超过 33 的自然数,完成下面的判断题和单选题。

判断题

  1. 代码中 mask 变量的值转化为二进制的低 1616 位结果是 0000 0000 1111 1111\texttt{0000 0000 1111 1111}()。 {{ select(1) }}
  • T
  • F
  1. 当输入 x=0x=0 的时候,nxnx 表示 nn 中最低八位对应的字节的数据。( ) {{ select(2) }}
  • T
  • F
  1. 去掉程序第 1111 行至第 1212 行中 (~(mask << x8))(~(mask << y8)) 两处中的最内层 括号不会改变程序的结果。( ) {{ select(3) }}
  • T
  • F
  1. 当输入为 15078 0 1 时,变量 nx,nynx,ny 的值分别为多少?( ) (提示:十进制数 1507815078 与十六进制数 3AE6\text{3AE6} 相同) {{ select(4) }}
  • 0xE6, 0x3A\text{0xE6, 0x3A}
  • 0x6, 0xE0\text{0x6, 0xE0}
  • 0x6, 0xE\text{0x6, 0xE}
  • 0x6, 0xA\text{0x6, 0xA}
  1. 当输入为 23270 0 1 时,输出为多少?( ) (提示:十进制数 2327023270 与十六进制数 5AE6\text{5AE6} 相同) {{ select(5) }}
  • 0x5AE6\text{0x5AE6}
  • 0x5E6A\text{0x5E6A}
  • 0xA56E\text{0xA56E}
  • 0xE65A\text{0xE65A}
  1. 以下哪一个变量的类型修改可能影响程序的输出?( ) {{ select(6) }}
  • x,yx,y 修改为 unsigned int 类型。
  • x8,y8x8,y8 修改为 short 类型。
  • maskmask 修改为 int 类型。
  • nx,nynx,ny 修改为 unsigned long long 类型。