初赛梳理II 进制与编码

1、已知A=11001010B,B=00001111B,C=01011100B,A|B&C=( )B。
A、11001110 B、01110110 C、11101110 D、01001100
\color{green}{正解:A}
\color{red}{题解}

"∧"和"∨"相当于计算机程序里的and和or,在这里可以当作按位与和按位或理解。
"∧"是and,"∨"是or,运算时,"∧"优先级高于"∨"。

2、关于“零”的原码、反码和补码,下列说法正确的是( )。
A、零的原码表示只有一种 B、零的反码表示只有一种
C、零的补码表示只有一种 D、零的原码、反码和补码的表示都有两种
\color{green}{正解:C}
\color{red}{题解}

对于有符号整数,把0分别作正数,负数看待,其原码和反码是不一样的,但是其补码确实一样的。
在8位系统中,+0的原码反码补码都是0000 0000,-0的原码反码补码一次是1000 0000,1111 1111,0000 0000。
所以对于零而言,它的补码表示只有一种,原码反码表示有两种。

3、(2010)16+(32)8 的结果是( )。
A、(8234)10 B、(202B)16 C、(20056)8 D、(100000000110)2
\color{green}{正解:A}
\color{red}{题解}

首先将十六进制数(2010)16转换为十进制数:
(2010)16 = 216^3 + 016^2 + 116^1 + 016^0 = 8192 + 0 + 16 + 0 = 8218
然后将八进制数(32)8转换为十进制数:
(32)8 = 38^1 + 28^0 = 24 + 2 = 26
最后将两个十进制数相加:
8218 + 26 = 8244

4、0xD46==0b_______。
A、110101010110 B、110111001100 C、110101000110 D、110011000111
\color{green}{正解:C}

5、已知二进制下,A=11001010,B=00001111,C=01011100,则A∨B∧C=( )。
A、11001110 B、01110110 C、11101110 D、01001100
\color{green}{正解:A}
\color{red}{题解}

根据位运算的优先级,先进行与运算(&),再进行或运算(|)。
A = 11001010
B = 00001111
C = 01011100
B & C = 00001100
A | (B & C) = 11001110
所以,A∨B∧C 的结果是 11001110。

6、十进制下的无限循环小数(不包括循环节内的数字均为0或均为9的平凡情况),在二进制下有可能是( )。
A、无限循环小数(不包括循环节内的数字均为0或均为9的平凡情况) B、无限不循环小数 C、有限小数 D、整数
\color{green}{正解:A}
\color{red}{题解}

在十进制下,无限循环小数可以表示为有限的小数或 循环小数。
当将这样的无限循环小数转换为二进制时,同样可以得到无限循环的二进制表示。

7、如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于b”的是( )。
A、((a / b) == 1) B、((a & b) == a) C、((a ^ b) == 0) D、((a | b) == b)
\color{green}{正解:C}
\color{red}{题解}

选项 A:((a / b) == 1) 是通过除法来判断 a 是否等于 b,但如果 a 和 b 不完全相等时,除法的结果可能不为 1,所以这个选项不正确。
选项 B:((a & b) == a) 是通过按位与操作来判断 a 是 否等于 b,这种操作只有在 a 和 b 的所有位都相同时才成立,但并不保证 a 和 b 的值完全相等,所以这个选项不正确。
选项 D:((a | b) == b) 是通过按位或操作来判断 a 是否等于 b,按位或操作会将两个数的相同位中任何一位为 1 的位置为 1,所以这个选项不正确。

8、如果 a 为 int 类型的变量,下列哪个表达式可以正确求出满足“小于等于a且是 4 的倍数”的整数中最大的?( )。
A、(a & (~3)) B、((a << 2) >> 2) C、(a ^ 3) D、((a - 1) | 3) + 1
\color{green}{正解:A}

01 #include <iostream>
02 using namespace std;
03 int main()
04 {
05     string ch;
06     int a[200];
07     int b[200];
08     int n, i, t, res;
09     cin >> ch;
10     n = ch.length();
11     for (i = 0; i < 200; i++)
12         b[i] = 0;
13     for (i = 1; i <= n; i++)
14     {
15         a[i] = ch[i - 1] - '0';
16         b[i] = b[i - 1] + a[i];
17     }
18     res = b[n];
19     t = 0;
20     for (i = n; i > 0; i--)
21     {
22         if (a[i] == 0)
23             t++;
24         if (b[i - 1] + t < res)
25             res = b[i - 1] + t;
26     }
27     cout << res << endl;
28     return 0;
29 }

\color{yellow}{假设输入ch是只有0,1的二进制串,请完成以下判断题、选择题。}

1、输入“1001101011001101101011110001”,输出()。
A、10 B、11 C、12 D、13
\color{green}{正解:B}

2、输入“1001000101100101101101101011”,输出()。
A、10 B、11 C、12 D、13
\color{green}{正解:A}

2 个赞