《深入理解计算机系统》读书笔记 —— 第二章、信息的表示和处理

本文深入探讨了计算机内存管理的基础,包括虚拟内存、字数据大小、寻址和字节顺序等概念,以及如何在C语言中进行位级和逻辑运算。此外,还详细解释了整数的表示方法,如无符号数和补码编码,以及整数运算的规则和溢出检测。

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

 

一、信息的存储

    几个重要概念:

  • 虚拟内存    ——    机器级程序将内存视为一个非常大的字节数组,称为虚拟内存
  • 虚拟地址空间    ——    虚拟内存中的每个字节都由一个唯一数字标识,称为它的地址。所有可能的地址的集合就称为虚拟地址空间
  • 程序对象    ——    程序数据、指令和控制信息的统称

1.1、十六进制表示法

    由于二进制表示法太冗长,十进制表示法又不容易与位模式进行转换,所以比较中庸的一个数值表示法是十六进制表示法。

    ①十六进制与二进制的转换

         一个十六进制值可以转换为4个二进制位:

    ②十六进制与十进制的转换:

  • 十六进制数字转换为十进制数字:用相应的16的幂乘以每个十六进制数字
  • 十进制数字转换为十六进制数字:用16反复除十进制数字,最后使用最后一个余数放在最前面的方式将所有余数相连就是转换后的十六进制数。

1.2、字数据大小

    字长指明指针数据的标称大小。

    由于虚拟地址是以字长对应的字来编码的,所以字长大小决定了虚拟地址空间的最大大小。

    对于一个\omega位的机器来说,它能编码的虚拟地址的个数最多为2^{\omega }个,所以它的虚拟地址的范围就是0 ~ 2^{\omega }-1,程序也即最多能访问2^{\omega }个字节。

    因此,可以算出32位字长的机器虚拟地址空间的最大大小为2^{32}字节=4千兆字节=4GB。64位字长的机器虚拟地址空间的最大大小为2^{64}字节=16777216TB=16EB!

    程序被称为"32位程序"或"64位程序",区别在于该程序是如何编译的,而不是其运行的机器类型。

    程序可移植性的一个方面就是使程序对不同数据类型的确切大小不敏感。

1.3、寻址和字节顺序

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

    机器存储字节的顺序:

  • 小端法: 在内存中按照从最低有效字节到最高有效字节的顺序存储对象
  • 大端法: 在内存中按照从最高有效字节到最低有效字节的顺序存储对象

    一旦选择了特定操作系统,那么字节顺序也就固定下来。

1.4、表示字符串

    C语言中字符串被编码为一个以null(其值为0)字符结尾的字符数组。某个字符都由某个标准编码来表示,最常见的是ASCII字符码。

    在使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关。因而文本数据比二进制数据具有更强的平台独立性。

1.5、表示代码

    不同的机器类型使用不同的且不兼容的指令和编码方式,因此二进制代码是不兼容的。

    二进制代码很少能在不同机器和操作系统组合之间移植。

1.6、布尔代数简介

    布尔代数就是将逻辑值TRUE和FALSE编码为二进制值1和0,以研究逻辑推理的基本原则。

    布尔运算有非、与、或、异或。

    位向量就是固定长度为\omega,由0和1组成的串。

1.7、C语言中的位级运算

    C语言中的位级运算符有:

  • "~"    ——    非
  • "|"    ——    或
  • "&"    ——    与
  • "^"    ——    异或

    位级运算的一个常见用法就是实现掩码运算,比如:

  • 位级运算x & 0xFF生成一个由x的最低有效字节组成的值
  • 位级运算~0将生成一个全1的掩码,不管机器的字大小是多少。

1.8、C语言中的逻辑运算

    逻辑运算和位级运算的区别是,逻辑运算只返回1或0,分别表示结果为TRUE或FALSE。

    C语言中的逻辑运算符有:

  • "||"    ——    或
  • "&&"    ——    与
  • "!"    ——    非

    C语言中的逻辑或运算和逻辑与运算是短路运算。

1.9、C语言中的移位运算

    ①C语言中的左移运算

        C语言的左移运算只有逻辑左

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值