题目1
[可以看到这个练习中,从 [ 1011 ] 扩展到 [ 11011 ] 再扩展到 [ 111011 ] ,它们都是 -5 的补码表示。可见有符号数位扩展时候,左边扩展符号位,不会对它的数值有影响。]
[而且也验证了,对于无符号数来说,每一个数只有一种位向量表示,而对于有符号数(补码表示),同样都是-5,就有很多种表示,甚至是无限种,只要扩展符号位就可以。 -2019/5/6]
题目2
题目3
A: 当 s 比 t 短的时候,该函数会返回1
B:由于 strlen 被定义为产生一个无符号的结果,差和比较都采用无符号运算来计算。当 s 比 t 短的时候,strlen(s) - strlen(t)的差会为负,但是变成了一个很大的无符号数,大于0。
C:改为 return strlen(s) > strlen(t);
[ 举个负数变成了很大的无符号数的例子: 3 - 4 ===> [0011] - [0100] = [1111] ,这个[1111] 视为有符号数(补码),则为-1,结果正确了;视为无符号数,则为15,结果就错了。]