CSSAPP稀里糊涂的读书笔记(二)信息的表示和处理

本文深入探讨了计算机如何通过位和字节序列编码信息,包括无符号和补码整数、浮点数的不同编码方式,以及小端法和大端法在多字节数据存储中的应用。同时,讲解了虚拟内存、字长对虚拟地址空间的影响,以及IEEE浮点标准下不同数据类型转换的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章主要讨论编码。

  1. 计算机将信息编码为位(比特),通常组织成字节序列。有不同的编码方式用来表示整数、实数和字符串。不同的计算机模型在编码数字和多字节数据中的字节顺序时使用不同的约定。

  2. 无符号(unsigned)编码基于传统的二进制表示法,表示大于或者等于零的数字。补码(two’s-complement)编码是表示有符号整数的最常见的方式,有符号整数就是可以为正或者为负的数字。浮点数(floating-point)编码是表示实数的科学计数法的以2为基数的版本。

  3. 机器级程序将内存视为一个非常大的字节数组,成为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合就称为虚拟地址空间。

  4. 每台计算机都有一个字长,指明指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。

  5. 在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。

  6. 某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,称为小端法(little endian);而另一些机器则按照从最高有效字节到最低有效字节的顺序存储,称为大端法(big endian)。
    123456
    小端法:56 34 12
    大端法:12 34 56

  7. 各种关于补码,整数的有无符号的原理和推导,又多又杂,理解起来还很困难,所以这里就不总结了,还是看书比较好。

  8. 表示数字的有限字长限制了可能的值的取值范围,结果运算可能溢出。补码表示提供了一种既能表示负数也能表示正数的灵活方法,同时使用了与执行无符号算术相同的位级实现,这些运算包括像加法、减法、乘法,甚至除法,无论运算数是以无符号形式还是以补码形式表示的,都有完全一样或者非常类似的位级行为。

  9. IEEE浮点标准
    在这里插入图片描述
    在这里插入图片描述

  10. 当在int、float和double格式之间进行强制类型转换时,程序改变数值和位模式的原则如下(假设int是32位的):

  • 从int转换成float,数字不会溢出,但是可能被舍入。
  • 从int或float转换成double,因为double有更大的范围(也就是可表示值得范围),也有更高得精度(也就是有效位数),所以能够保留精确的数值。
  • 从double转换成float,因为范围要小一些,所以值可能溢出成正无穷或负无穷。另外,由于精确度较小,它还可能被舍入。
  • 从float或者double转换成int,值将会向零舍入。进一步说,值可能会溢出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值