作业1

2.9

A.

颜色(RGB)补(RGB)
黑色(000)白色(111)
蓝色(001)黄色(110)
绿色(010)红紫色(101)
蓝绿色(011)红色(100)
红色(100)蓝绿色(011)
红紫色(101)绿色(010)
黄色(110)蓝色(001)
白色(111)黑色(000)

B.

蓝色 | 绿色 = 蓝绿色(001|010=011)

黄色 & 蓝绿色 = 绿色(110&011=010)

红色 ^ 红紫色 = 蓝色(100^101=001)

2.14

x = 0x66 = 0110 0110(2)

y = 0x39 = 0011 1001(2)

x & y = 0010 0000(2) = 0x20

x | y = 0111 1111(2) = 0x7f

~x | ~y = 1101 1111(2) = 0xdf

表达式表达式
x & y0x20x && y0x01
x | y0x7fx || y0x01
-x | -y0xdf!x || !y0x00
x & !y0x00x && -y0x01

2.15

!(x^y),x和y的每一位都相同时返回1.

2.18

0x2e0=736

-0x58=-88

0x28=40

-0x30=-48

0x78=120

0x88=136

0x1f8=504

0x8=8

0xc0=192

-0x48=-72

2.21

表达式类型求值
-2147483647-1 == 2147483648U无符号1
-2147483647-1 < 2147483647有符号1
-2147483647-1U < 2147483647无符号0
-2147483647-1 < -2147483647有符号1
-2147483647-1U < -2147483647无符号1

2.23

A.

wfun1(w)fun2(w)
0x00000076118118
0x876543213333
0x000000C9201-55
0xEDCBA987135-121

B.

fun1从w的低8位中提取值得到一个0~255的整数。fun2从w的低8位中提取值再进行符号扩展,得到一个 -128~127的整数。

2.25

length0 时,由于 lenght 为无符号数, length-1UMaxi <= length-11 ,循环体会被执行,于是会出现 a[1] 等,发生内存错误。

2.26

A. 当 s 比 t 短时,会返回1

B. 当 s 比 t 短时, strlen(s) - strlen(t) 结果为负数,但由于是无符号数,会被认为是很大的一个正数,于是返回1

C. 将 return strlen(s) - strlen(t) > 0; 改为 return strlen(s) > strlen(t);