Skip to content

Latest commit

 

History

History
41 lines (29 loc) · 1.67 KB

2.0.md

File metadata and controls

41 lines (29 loc) · 1.67 KB

第2章 信息的表示和处理

现代计算机存储和处理的信息以二值信号表示,这些二进制数字,或者称为位(bit),奠定了数字革命的基础。
为什么要选二进制,因为二值信号能够很容易地被表示、存储和传输。想了解详细的内容可以阅读《编码的奥秘》。

三种最重要的数字表示:

  • 无符号编码  传统二进制表示法,大于等于零
  • 补码编码    有符号整数,可正可负
  • 浮点数编码  以二为基数的实数科学记数法

计算机是用有限数量的位来对一个数字编码,因此当结果太大到无法表示的时候,就会溢出。溢出发生会产生一些吃惊的结果,这个问题程序员必须注意。

注意浮点运算和整数运算有不同的数学属性,它们处理数字表示有限性的方式不同—整数的表示虽然只能编码一个相对较小的数值范围,但是这种表示是精确的;而浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的。

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5         float a=(3.14 + 1e20) - 1e20;
  6         float b=3.14 + (1e20 - 1e20);
  7 
  8         printf("a=%f\nb=%f\n",a,b);
  9 
 10         return 0;
 11 }
~ 

运行结果:

root@kali:~/Desktop/c/csapp/chapter2# ./2-0
a=0.000000
b=3.140000

为什么会这样呢?这个问题在以后会得到详细的回答。

大量计算机的安全漏洞都是由于计算机算术运算的微妙细节引发的,在这章,我会有详细的描述和解释。

本章目录