(学习笔记)第2章 信息的表示和处理

文章目录


线索栏

  1. 现代计算机表示一切信息的基石是什么? 为什么选择它,而不是十进制?
  2. "位+解释" 这一核心模式如何让我们表示万物?
  3. 本章将重点研究哪三种最重要的数字表示/编码?它们分别用于表示什么?
  4. 整数运算和浮点数运算在数学属性上有何根本不同?根源是什么?
  5. 为什么程序员必须了解数据的位级表示和运算属性?(三个原因)
  6. (旁注)C语言有哪些主要标准版本?GCC如何指定编译标准?
  7. (旁注)阅读本章数学内容时,应采用什么方法?

笔记栏

本章核心:探究计算机如何用有限的二进制位表示数字(整数、实数),以及这些表示方式如何决定了运算的属性和局限性。

1.信息的基石:二进制位

1)事实

所有信息均以二值信号(位/Bit) 表示。

2)选择二进制的原因

(1)物理实现简单可靠:易于用物理状态表示(穿孔、电压、磁场方向)。

(2)电路简单可靠:使得超高密度集成成为可能(芯片上数十亿电路)。

3)"位+解释"模式

单独的位无用,但将位组合在一起并赋予解释,就能表示任何有限集合的元素(如数字、字符)。

2.三种核心的数字表示

(1)无符号编码:表示大于等于零的整数。

(2)补码编码:表示有符号整数(正、负、零)的最常用方式。

(3)浮点数编码:基于二进制科学计数法,近似表示实数。

3.计算机运算的特性与后果

1)有限性导致的溢出

用有限位表示数字,结果超出范围时会发生溢出,可能导致反直觉的结果。

例子:在32位int系统中,200 * 300 * 400 * 500 结果为负数 -884,901,888,但运算保持一致(满足结合律/交换律)。

2)整数 vs. 浮点数运算

(1)整数:表示范围较小,但精确。运算具有许多熟悉的整数算术属性(如结合律)。

(2)浮点数:表示范围大,但近似。运算不具有结合性等属性。

(3)例子:(3.14+1e20)-1e20 结果为 0.0,而 3.14+(1e20-1e20) 结果为 3.14。

4.程序员为何必须理解这些?

(1)正确性与可移植性:确保程序在所有数值范围和不同机器上行为正确。

(2)安全性:许多安全漏洞源于算术运算的微妙细节。

(3)理解底层代码:是学习机器级编程(第3章)和编译器优化的基础。

【旁注1:怎样阅读本章】

(1)方法:内容以"原理→示例与讨论→(推导)"的结构呈现。

(2)建议:重在建立直觉,理解原理和启示。初次阅读可跳过复杂推导,通过练习题巩固。

【旁注2:C编程语言的演变与编译】

(1)标准版本:贝尔实验室C → ANSI C (C89)→ ISO C90​ → ISO C99​ → ISO C11。后续大多向后兼容。

(2)GCC编译选项:用 -std= 指定标准,如 -std=c11。-ansi 指代 C90。


总结

本章开篇确立了计算机世界的根本表示法------二进制,并指出"位+解释"是构建一切数字表示的通用范式。核心任务是掌握无符号、补码、浮点数这三种将二进制模式映射到数学意义的编码方案。

关键认知在于:由于表示是有限的,计算机算术并非完美的数学运算。整数运算精确但可能溢出;浮点数运算范围大但是近似的,且不遵守结合律。这种"有限性"与"近似性"是程序中错误和安全漏洞的潜在根源。

因此,深入理解位级表示,是程序员编写正确、可靠、可移植、安全代码的必备基础,也是通往机器级思维的关键一步。旁注提供的阅读方法和语言背景,为后续的学习提供了实用的方法论和历史语境。

相关推荐
curry____3032 小时前
c++位运算符笔记
java·c++·笔记
瞎某某Blinder11 小时前
DFT学习记录[4] 电子和空穴的有效质量计算全流程
python·学习
zhangfeng113312 小时前
Warmup Scheduler深度学习训练中,在训练初期使用较低学习率进行预热(Warmup),然后再按照预定策略(如余弦退火、阶梯下降等)衰减学习率的方法
人工智能·深度学习·学习
日更嵌入式的打工仔12 小时前
LAN9253中文注释第七章
笔记·原文翻译
red_redemption14 小时前
自由学习记录(118)
学习
小猪佩奇TONY15 小时前
OpenCL 学习(5)---- OpenCL 内核和内核参数
学习
01二进制代码漫游日记15 小时前
自定义类型:联合和枚举(一)
c语言·开发语言·学习·算法
非凡ghost15 小时前
小X分身APP(手机分身类工具)
android·windows·学习·智能手机·软件需求
weixin_4588726116 小时前
东华复试OJ每日3题打卡·复盘82~84
学习