第二章:信息的表示和处理

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

信息存储

大多数计算机使用8位的块或者字节(byte)作为最小的可寻址的内存单位,而不是访问内存中单独的位。

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

十六进制表示法

一个字节由8位组成,二进制表示法的值域是00000000~11111111,十进制表示法的值域是0-255。十六进制表示法的值域是00-FF。

2.1.1-1.png
2.1.1-2.png

字数据大小

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

寻址和字节顺序

  • 最低有效字节在最前的方式,称为小端法little endian。
  • 最高有效字节在最前的方式,称为大端法big endian。

表示字符串

表示代码

布尔代数简介

C语言中的位级运算

C语言中的逻辑运算

C语言中的位移运算

x<<k表示x向左移动k位,丢弃最高的k位,并在右端补k个0。

x>>k右移运算,逻辑右移或算数右移。逻辑右移在左端补齐k个0,算术右移是在左端补k个最高有效位的值。

Java中x>>k是算术右移,x>>>k是逻辑右移

整数表示

整型数据类型

无符号数的编码

补码编码

有符号数的计算机表示方式就是补码形式。字节的最高有效位解释为负权。最高有效位称为符号位,符号位被设置为1时,表示值为负,设置为0时,值为非负。

有符号数和无符号数之间的转换

(未完成)

C语言中的有符号数与无符号数

C语言支持所有整形数据类型的有符号和无符号运算。大多数数字都默认为是有符号的。

printf输出数值时,%d表示有符号十进制,%u表示无符号十进制,%x表示十六进制格式。

扩展一个数字的位表示

要将一个无符号数转换为一个更大的数据类型,只要简单的在表示的开头添加0,这种运算称为零扩展。

(未完成)

整数运算

(未完成)

浮点数

(未完成)

推荐阅读更多精彩内容