《深入理解计算机系统》读书笔记——第二章(一)
本章主要介绍了计算机如何编码信息,及对信息的处理。
纲要
常用进制介绍及转换:二进制、八进制、十进制、十六进制
代码、字符串的表示,包含了字节序
整数的表示和运算,及位扩展操作
浮点数的表示和运算
信息的表示和进制介绍
如第一章所述,计算机系统内以二进制为基础进行设计,一个二进制位称为 1 比特。惯例上,计算机中将连续 8 比特(Bit)所组成的块,称为 1 个字节(Byte)。字节是最小的可寻址的内存单位。多个字节又可以组成不同的信息。
进制其实是个很常见的概念,生活中最多用到的是十进制。十进制的意思是:逢十进一,即
它的每一位的取值范围为;
从右往左数,从 0 开始计算索引,第个元素的权重是。
同理,二进制的每一位的取值范围为,第个元素的权重是 ;八进制的每一位的取值范围为,第个元素的权重是;十六进制比较特殊,它的每一位的取值范围最大值超过了 10,因此需要使用字母(不区分大小写)来表示,即以 A 表示 10,B 表示 11,C 表示 12,以此类推,所以它的每一位的取值范围为,第个元素的权重是。
如果直接以二进制的形式呈现计算机的信息,那么多的 0 和 1 会使人眼花缭乱;而如果以十进制呈现,又不利于换算到二进制理解。所以通常呈现给人阅读时,采用十六进制展示比特位信息。
代码和字符串的表示
字长(Word size)
在计算机系统中有一个重要的概念:字长(Word size),一般是字节的整数倍,用于指明数据的标称大小。它所决定的最重要的一个系统参数就是虚拟地址空间的最大大小。
举例来说:我们日常应该听过 32 位、64 位操作系统,说的就是字长的大小。如果是 32 位系统,它的可寻址地址范围为 ,即 4GB。
表示字符串
以 C 语言为例,字符串就是一个以 null 字符结尾的字符数组,每个字符数组由某个标准编码表示,用得最多的是 ASCII。
但请注意,还有其他许多字符编码集,如大名鼎鼎的 Unicode 集合(UTF-8、UTF-16),还有我们熟知的汉字编码字符集 GBK(GB2312)。在编写国际化的程序时尤为要注意⚠️!
表示代码
当 C 语言通过编译,翻译为机器语言后,源码中的变量名称等符号信息大多数被隐去,只剩下一个个指令和数据地址。其实从机器角度看,程序就是一个二进制序列。在学习汇编语言前一定要理解!
字节序(Byte order)
字节序,是指字节的排列顺序。这个概念仅对多字节对象有意义。
多字节对象存储在内存中时,必须考虑它的字节序问题,这个对程序正确运行非常重要。
一般而言,多字节对象在内存中是连续存储的。通常存在两种字节序:
大端法(Big endian):该对象的最低有效位存储在分配给该对象的内存空间中的高地址。
小端法(Little endian):该对象的最低有效位存储在分配给该对象的内存空间中的低地址。
如何记忆?只需要记住最低有效位的位置。
大端法:最低有效位在高(大)地址。
小端法:最低有效位在低(小)地址。
通常,字节序与处理器和操作系统两者有关。我们可以通过编码确认字节序,例子如下:
思路非常简单,就是检查最低有效位是否符合某个预期。
上面获取多对象最低有效位的方式也可以通过 union
实现。
总结
今日学习了以下内容:
计算机中信息如何表示
字长和字节序的概念
版权声明: 本文为 InfoQ 作者【如浴春风】的原创文章。
原文链接:【http://xie.infoq.cn/article/50beb7a2c6de22d60ce89f840】。文章转载请联系作者。
评论