CSAPP读书笔记(二)一一信息的表示和处理

计算机的古怪脾气

在数学上看 (x+1)2≥0(x+1)2≥0 是一定的,但是在计算机中就不一定了,比方说:

1
2
3
$lldb
(lldb) print (233333 + 1) * (233333 + 1)
(int) $0 = -1389819292

溢出辣,就成了负数。

但是如果我们用浮点数的话,就不会出现因为溢出而变成负数的问题。

可是浮点数看起来也不是那么的可靠啊:

1
2
3
4
(lldb) print (1e20 + -1e20) + 3.14
(double) $1 = 3.1400000000000001
(lldb) print 1e20 + (-1e20 + 3.14)
(double) $2 = 0

(a+b)+c=a+(b+c),简单的结合律瞬间失效

这是因为浮点数的表示方法虽然可以避免溢出(极端情况还是会),但会损失部分精度。

大端小端

之前的博客有介绍到大端模式和小端模式

参考

【不周山之读薄 CSAPP】壹 数据表示