今日阅读范围:P28 ~ P60

Chapter 2 : 信息的表示和处理 - 习题 (1)

2.1

A.

$$
\text {0x39A7F8} = \text {(0011 1001 1010 0111 1111 1000)}_2
$$

Correct

B.

$$
\text {(1100 1001 0111 1011)}_2 = \text {0xC97B}
$$

Correct

C.

$$
\text {0xD5E4C} = \text {(1101 0101 1110 0100 1100)}_2
$$

Correct

D.

$$
\text {(0010 0110 1110 0111 1011 0101)}_2 = \text {0x26E7B5}
$$

Correct

2.2

$n$ $2^n$ (dec) $2^n$ (hex)
9 512 0x200
19 524288 0x80000
14 16384 0x4000
16 65536 0x10000
17 131072 0x20000
5 32 0x20
7 128 0x80
Correct

2.3

dec bin hex
0 0000 0000 0x00
167 1010 0111 0xa7
62 0011 1110 0x3e
188 1011 1100 0xbc
55 0011 0111 0x37
136 1000 1000 0x88
243 1111 0011 0xf3
82 0101 0010 0x52
172 1010 1100 0xac
231 1110 0111 0xe7
Correct

2.4

A.

$$
\text {0x503c + 0x8 = 0x5044}
$$

Correct

B.

$$
\text {0x503c - 0x40 = 0x4ffc}
$$

Correct

C.

$$
\text {0x503c + 64 = 0x503c + 0x40 = 0x507c}
$$

Correct

D.

$$
\text {0x50ea - 0x503c = 0xae}
$$

Correct

2.5

int val = 0x87654321
byte_pointer valp = (byte_pointer) &val;

show_bytes(valp, 1); /* A. */
show_bytes(valp, 2); /* B. */
show_bytes(valp, 3); /* C. */

A.

  • 小端法:21
  • 大端法:87

B.

  • 小端法:21 43
  • 大端法:87 65

C.

  • 小端法:21 43 65
  • 大端法:87 65 43
Correct

2.6

A.

$$
\text {0x00359141 = (1101011001000101000001)}_2
$$

$$
\text {0x4A564504 = (1001010010101100100010100000100)}_2
$$

B.

$$
\begin{aligned}
\text {0x00359141} = (1101011001000101000001&)_2 \\
\text {0x4A564504} = (10010100101011001000101000001&00)_2
\end{aligned}
$$

前者的最低位到倒数第二高位,后者第三位开始。21位匹配。

C.

后一串的最后两位和前八位。前一串的最高位。

Correct
最高位的说法应该变更为最高有效位

2.7

0x61 0x62 0x63 0x64 0x65 0x66

Correct

2.8

运算 结果
a [01101001]
b [01010101]
~a [10010110]
~b [10101010]
a & b [01000001]
a | b [01111101]
a ^ b [00111100]
Correct

2.9

A.

  • 黑 <=> 白
  • 蓝 <=> 黄
  • 绿 <=> 红紫
  • 蓝绿 <=> 红

B.

  • 蓝色 | 绿色 = 蓝绿
  • 黄色 & 蓝绿 = 绿色
  • 红色 ^ 红紫 = 蓝色
Correct

2.10

Step *x *y
initial a b
1 a a ^ b
2 a ^ b ^ a = b a ^ b
3 b b ^ a ^ b = a
Correct

2.11

A. 都是 $k + 1$

B. 因为 inplace_swap() 传入了两个相同的地址,这两个相同的地址也必然指向相同的指,后来一进行异或运算就会变成零。

C. first <= last => first < last

Correct

2.12

A.

x & 0xFF
Correct

B.

(((~(x >> 2)) + 1) << 1) + x & 0xFF

正确应为:x ^ ~0xFF

C.

x | 0xFF
Correct

2.13

  • bool_or
    int result = bis(x, y);
  • bool_xor
    int result = bis(bic(y, x), bic(x, y));
Correct

2.14

x = 0x66
y = 0x39

x & y = 0x20
x && y = 0x01
x | y = 0x7f
x || y = 0x01
~x | ~y = 0xdf
!x || !y = 0x00
x & !y = 0x00
x && ~y = 0x01
Correct

2.15

!(x & y)

错误:应为 !(x ^ y)

2.16

x (hex) x (bin) x << 3 (bin) x << 3 (hex) x >> 2 (logic, bin) x >> 2 (logic, hex) x >> 2 (arithmetic, bin) x >> 2 (arithmetic, hex)
0xc3 1100 0011 0001 1000 0x18 0011 0000 0x30 1111 0000 0xf0
0x75 0111 0101 1010 1000 0xa8 0001 1101 0x1d 0001 1101 0x1d
0x87 1000 0111 0011 1000 0x38 0010 0001 0x21 1110 0001 0xe1
0x66 0110 0110 0011 0000 0x30 0001 1001 0x19 0001 1001 0x19
Correct

2.17

hex bin $B2U_4(\vec x)$ $B2T_4(\vec x)$
0xE [1110] 14 -2
0x0 [0000] 0 0
0x5 [0101] 5 5
0x8 [1000] 8 -8
0xD [1101] 13 -3
0xF [1111] 15 -1
Correct

2.18

  • A. 0x2e0 = 736
  • B. -0x58 = -88
  • C. 0x28 = 40
  • D. -0x30 = -48
  • E. 0x78 = 120
  • F. 0x88 = 136
  • G. 0x1f8 = 504
  • H. 0xc0 = 192
  • I. -0x48 = -72
Correct

2.19

$x$ $T2U_4(x)$
-8 -8 + 16 = 8
-3 -3 + 16 = 13
-2 -2 + 16 = 14
-1 -1 + 16 = 15
0 0
5 5
Correct

2.20

$$
T2U_w (x) = \begin{cases}
x + 2 ^ w & x < 0 \\
x & x \geq 0
\end{cases}
$$

Correct

2.21

exp type val
-2147483647-1 == 2147483648U unsigned 1
-2147483647-1 < 2147483647 signed 1
-2147483647-1U < 2147483647 unsigned 0
-2147483647-1 < -2147483647 signed 1
-2147483647-1U < -2147483647 unsigned 0

最后一项错误,应该为 1,因为左右两边等于都加上 2147483648

2.22

2.23

int fun1(unsigned word) {
    return (int) ((word << 24) >> 24)
}

int fun2(unsigned word) {
    return ((int) word << 24) >> 24;
}

A.

w fun1(w) fun2(w)
0x00000076 0x76 0x76
0x87654321 0x21 0x21
0x000000C9 0xC9 0xFFFFFFC9
0xEDCBA987 0x87 0xFFFFFF87
Correct

2.24

unsigned dec unsigned crop two's dec two's crop
0 0 0 0
2 2 2 2
9 1 -7 1
11 3 -5 3
15 7 -1 -1
Correct

2.25

length 的类型是 unsigned, 对 length - 1 则就变成了 length + T2U(-1)。在转换之后 length - 1 就变成了 UMax ,不仅可以访问数组内的任何元素,还可以越界访问,超过数组的大小后就会造成越界。

修改:i <= length - 1 => i < length

Correct

2.26

当字符串 t 比字符串 s 更长时,strlen(s) - strlen(t) 是无符号数,此时会负数根据补码还是正的,所以不正确。

修改:strlen(s) > strlen(t)

Correct
最后修改:2021 年 09 月 11 日 01 : 06 PM
真的不买杯奶茶嘛....qwq