#mxday12. 初赛 DAY 1 客观题(进制·编码·内存·位运算)
初赛 DAY 1 客观题(进制·编码·内存·位运算)
考查范围:进制、二进制编码(原码 / 反码 / 补码)、内存与数据类型、位运算、指针。
一、二进制编码(单选题,每题 3 分)
- 下列二进制表示的十进制数值分别是( ):[10000011]原 = ( ) ,[10000011]补 = ( )
{{ select(1) }}
- -125,-3
- -3,-125
- -3,-3
- -125,-125
- 关于计算机中的编码,下列说法中错误的是( )。
{{ select(2) }}
- 对于无符号数,原码就是真值
- 正数的反码是其本身
- 负数的反码和补码是不一样的
- 负数的反码,在其原码的基础上,各个位取反
- 在 8 位二进制原码表示中,八进制数 -5 的二进制形式是什么( )?
{{ select(3) }}
- 10000101
- 11111010
- 11111011
- 00000101
- 整数 -5 的 16 位补码表示是( )。
{{ select(4) }}
- 1005
- 1006
- FFFA
- FFFB
- 如果 16 位短整数 -2 的二进制是 "FFFE",则短整数 -4 的十六进制是( )。
{{ select(5) }}
- FF04
- FFFA
- FFFC
- FFFH
- 8 位二进制原码能表示的最小整数是( )。
{{ select(6) }}
- -127
- -128
- -255
- -256
- 反码表示中,零的表示形式有( )。
{{ select(7) }}
- 1 种
- 2 种
- 8 种
- 16 种
- 若 X 的 8 位补码为 0000 1010,则 X/2 的补码是( )。
{{ select(8) }}
- 0000 0101
- 1000 0101
- 0000 0101 或 1000 0101
- 算术右移后结果取决于符号位
- 若 X 的 8 位补码为 1000 1010,则 X/2 的补码是( )。
{{ select(9) }}
- 1000 0101
- 1100 0101
- 1100 0101 或 0000 0101
- 算术右移后结果取决于符号位
二、内存与数据类型(单选题,每题 3 分)
- 以下代码的输出是什么( )?
int a = 1234, b = -1234567;
int c = a + b;
cout << (unsigned int)c;
{{ select(10) }}
- -1233333
- 4293733963
- 12354564
- 42723616
- 一个 32 位整型变量占用( )个字节。
{{ select(11) }}
- 32
- 128
- 4
- 8
- 32 位 int 类型的存储范围是( )。
{{ select(12) }}
- -2147483647 ~ +2147483647
- -2147483647 ~ +2147483648
- -2147483648 ~ +2147483647
- -2147483648 ~ +2147483648
- 记 1KB 为 1024 字节(byte),1MB 为 1024KB,那么 1MB 是多少二进制位(bit)?( )
{{ select(13) }}
- 1000000
- 1048576
- 8000000
- 8388608
- 移动公司推出 10Mb/s 的套餐,请问一秒能传输大概多少字节( )?
{{ select(14) }}
- 10000000
- 1000000
- 80000000
- 8000000
三、位运算(单选题,每题 3 分)
- 二进制数 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
- 二进制数 1010 | 1100 的结果是( )。
{{ select(16) }}
- 1000
- 1110
- 1010
- 1100
- 以下哪个位运算可以交换两个变量的值(无需临时变量)( )?
{{ 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;
- 以下代码的说法正确的是什么( )?
#include <iostream>
using namespace std;
int main() {
int a = 0b1101;
int b = 0b1011;
cout << (a ^ b);
return 0;
}
{{ select(18) }}
- 进行的是整体异或运算
- 进行的是按位同或运算
- 进行的是按位与运算
- 进行的是按位异或运算
- 补码 1111 1101 进行 1111 1101 >> 1 运算以后得到的结果是( )。
{{ select(19) }}
- 1111 1100
- -2
- 1111 1101
- 1111 1010
- 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 的表示范围,判断以下说法的正误:
- 因为 x 是字符类型,只能存储 8 位,所以 x << 16 会溢出,程序出现未定义行为。
{{ select(21) }}
- 正确
- 错误
- 程序的输出结果与 y 的输入无关。
{{ select(22) }}
- 正确
- 错误
- 程序不可能输出 0 和负数。
{{ select(23) }}
- 正确
- 错误
- 若把代码中的 unsigned int 改为 unsigned short,程序不会溢出。
{{ select(24) }}
- 正确
- 错误
- 当 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 的表示范围,判断以下说法的正误:
- 因为 x 是 int 类型,只能存储 32 位,所以 x << 18ll 有几率溢出。
{{ select(26) }}
- 正确
- 错误
- y 无论输入什么,y >> 31 的结果不变。
{{ select(27) }}
- 正确
- 错误
- 当 x 为 -1 时,z 达到最大,与 y 的值毫无联系。
{{ select(28) }}
- 正确
- 错误
- 若把 y 的数据类型更改为 signed char(保证输入的是 ASCII 中的字符),那么 z 的值与 y 无关。
{{ select(29) }}
- 正确
- 错误
相关
在以下作业中: