布尔代数补充
异或(XOR,eXclusive OR)运算的真值表如下:
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
用一句话概括就是:两个操作数相同则结果为0,两个操作数不同则结果为1。
与非(NAND)和或非(NOR)运算就是在与、或运算的基础上取反:
A | B | A NAND B |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
A | B | A NOR B |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
二代补码(2’s Complement)
2’s Complement表示法规定:正数不变,负数先取反码再加1。
2’s Complement表示法的计算规则有些不同:减法转换成加法,忽略计算结果最高位的进位,不必加回到最低位上去。
要验证这条规则得考虑四种情况:
-
两个正数,相加得正
-
一正一负,相加得正
-
一正一负,相加得负
-
两个负数,相加得负
如何判断产生了溢出呢?我们还是分四种情况讨论:如果两个正数相加溢出,结果一定是负数;如果两个负数相加溢出,结果一定是正数;一正一负相加,无论结果是正是负都不可能溢出。
有符号数和无符号数
其实计算机做加法时并不区分操作数是有符号数还是无符号数,计算过程都一样,比如上面的例子也可以看作无符号数的加法:
1000 0010 +1111 1000 = ?
如果把这两个操作数看作有符号数-126和-8相加,计算结果是错的,因为产生了溢出;但如果看作无符号数130和248相加,计算结果是122进1,也就是122+256,这个结果是对的。
浮点数
具体计算内容见十四章第四节。
由于浮点数表示的精度有限,做浮点运算时要注意精度损失(Significance Loss)问题。