#mxday12. 初赛 DAY 1 客观题(进制·编码·内存·位运算)

初赛 DAY 1 客观题(进制·编码·内存·位运算)

考查范围:进制、二进制编码(原码 / 反码 / 补码)、内存与数据类型、位运算、指针。

一、二进制编码(单选题,每题 3 分)

  1. 下列二进制表示的十进制数值分别是( ):[10000011]原 = ( ) ,[10000011]补 = ( )

{{ select(1) }}

  • -125,-3
  • -3,-125
  • -3,-3
  • -125,-125
  1. 关于计算机中的编码,下列说法中错误的是( )。

{{ select(2) }}

  • 对于无符号数,原码就是真值
  • 正数的反码是其本身
  • 负数的反码和补码是不一样的
  • 负数的反码,在其原码的基础上,各个位取反
  1. 在 8 位二进制原码表示中,八进制数 -5 的二进制形式是什么( )?

{{ select(3) }}

  • 10000101
  • 11111010
  • 11111011
  • 00000101
  1. 整数 -5 的 16 位补码表示是( )。

{{ select(4) }}

  • 1005
  • 1006
  • FFFA
  • FFFB
  1. 如果 16 位短整数 -2 的二进制是 "FFFE",则短整数 -4 的十六进制是( )。

{{ select(5) }}

  • FF04
  • FFFA
  • FFFC
  • FFFH
  1. 8 位二进制原码能表示的最小整数是( )。

{{ select(6) }}

  • -127
  • -128
  • -255
  • -256
  1. 反码表示中,零的表示形式有( )。

{{ select(7) }}

  • 1 种
  • 2 种
  • 8 种
  • 16 种
  1. 若 X 的 8 位补码为 0000 1010,则 X/2 的补码是( )。

{{ select(8) }}

  • 0000 0101
  • 1000 0101
  • 0000 0101 或 1000 0101
  • 算术右移后结果取决于符号位
  1. 若 X 的 8 位补码为 1000 1010,则 X/2 的补码是( )。

{{ select(9) }}

  • 1000 0101
  • 1100 0101
  • 1100 0101 或 0000 0101
  • 算术右移后结果取决于符号位

二、内存与数据类型(单选题,每题 3 分)

  1. 以下代码的输出是什么( )?
int a = 1234, b = -1234567;
int c = a + b;
cout << (unsigned int)c;

{{ select(10) }}

  • -1233333
  • 4293733963
  • 12354564
  • 42723616
  1. 一个 32 位整型变量占用( )个字节。

{{ select(11) }}

  • 32
  • 128
  • 4
  • 8
  1. 32 位 int 类型的存储范围是( )。

{{ select(12) }}

  • -2147483647 ~ +2147483647
  • -2147483647 ~ +2147483648
  • -2147483648 ~ +2147483647
  • -2147483648 ~ +2147483648
  1. 记 1KB 为 1024 字节(byte),1MB 为 1024KB,那么 1MB 是多少二进制位(bit)?( )

{{ select(13) }}

  • 1000000
  • 1048576
  • 8000000
  • 8388608
  1. 移动公司推出 10Mb/s 的套餐,请问一秒能传输大概多少字节( )?

{{ select(14) }}

  • 10000000
  • 1000000
  • 80000000
  • 8000000

三、位运算(单选题,每题 3 分)

  1. 二进制数 11 1011 1001 0111 和 01 0110 1110 1011 进行按位与运算的结果是( )。

{{ select(15) }}

  • 01 0010 1000 1011
  • 01 0010 1001 0011
  • 01 0010 1000 0001
  • 01 0010 1000 0011
  1. 二进制数 1010 | 1100 的结果是( )。

{{ select(16) }}

  • 1000
  • 1110
  • 1010
  • 1100
  1. 以下哪个位运算可以交换两个变量的值(无需临时变量)( )?

{{ select(17) }}

  • a = a ^ b; b = a ^ b; a = a ^ b;
  • a = a & b; b = a | b; a = a & b;
  • a = a | b; b = a ^ b; a = a ^ b;
  • a = ~a; b = ~b; a = ~a;
  1. 以下代码的说法正确的是什么( )?
#include <iostream>
using namespace std;

int main() {
    int a = 0b1101;
    int b = 0b1011;
    cout << (a ^ b);
    return 0;
}

{{ select(18) }}

  • 进行的是整体异或运算
  • 进行的是按位同或运算
  • 进行的是按位与运算
  • 进行的是按位异或运算
  1. 补码 1111 1101 进行 1111 1101 >> 1 运算以后得到的结果是( )。

{{ select(19) }}

  • 1111 1100
  • -2
  • 1111 1101
  • 1111 1010
  1. a | 10(a 与 10 都是 10 进制,且二进制表示最高位为 1)运算的结果是( )。

{{ select(20) }}

  • 使 a 的二进制表示从右往左的第二位为 1
  • 使 a 的二进制表示从右往左的第一位为 0
  • 使 a 的二进制表示从右往左的第二位为 0
  • 使 a 的二进制表示最高位为 0

四、阅读程序 T1(判断题,每题 4 分)

#include <iostream>
using namespace std;

int main() {
    signed char x, y;
    cin >> x >> y;
    unsigned int z = (x << 16) + (y >> 8);
    cout << z;
    return 0;
}

假设输入的 x、y 均不会超过 char 的表示范围,判断以下说法的正误:

  1. 因为 x 是字符类型,只能存储 8 位,所以 x << 16 会溢出,程序出现未定义行为。

{{ select(21) }}

  • 正确
  • 错误
  1. 程序的输出结果与 y 的输入无关。

{{ select(22) }}

  • 正确
  • 错误
  1. 程序不可能输出 0 和负数。

{{ select(23) }}

  • 正确
  • 错误
  1. 若把代码中的 unsigned int 改为 unsigned short,程序不会溢出。

{{ select(24) }}

  • 正确
  • 错误
  1. 当 x 输入 127 的时候,程序输出的值最大。

{{ select(25) }}

  • 正确
  • 错误

五、阅读程序 T2(判断题,每题 5 分)

#include <iostream>
using namespace std;

int main() {
    signed int x, y;
    cin >> x >> y;
    unsigned long long z = (x << 18ll) + (y >> 31);
    cout << z;
    return 0;
}

假设输入的 x、y 均不会超过 signed int 的表示范围,判断以下说法的正误:

  1. 因为 x 是 int 类型,只能存储 32 位,所以 x << 18ll 有几率溢出。

{{ select(26) }}

  • 正确
  • 错误
  1. y 无论输入什么,y >> 31 的结果不变。

{{ select(27) }}

  • 正确
  • 错误
  1. 当 x 为 -1 时,z 达到最大,与 y 的值毫无联系。

{{ select(28) }}

  • 正确
  • 错误
  1. 若把 y 的数据类型更改为 signed char(保证输入的是 ASCII 中的字符),那么 z 的值与 y 无关。

{{ select(29) }}

  • 正确
  • 错误