孤立的讲,单个的位不是非常有用,但是当把位组合在一起,再加上某种解释,就能够表示任何有限集合的元素,如通过标准的字符码给26个英文字母进行编码。
信息存储
计算机将随机缓存存储器(RAM)、磁盘存储器、特殊硬件和操作系统软件结合起来,为程序提供一个看上去统一的字节数组,成为虚拟存储器。虚拟存储器是一个非常大的字节数组,每个字节为8位,并且有一个唯一的数字标识,称为字节的地址,所有的地址的集合称为虚拟地址空间。
十六进制表示法
以十六为基数来表示位模式,有效解决二进制冗余、十进制转化麻烦的问题。十六进制与二进制之间的转换非常简单,4位转化成1位。
字
字长
指明了整数和指针数据的标称大小,因为虚拟地址是已这个标量编码的,所以字长决定的最重要的参数是虚拟地址空间的最大大小,也就是说,对于一个字长为w位的机器来说,虚拟地址的范围是0-2^(w-1),程序最多可访问2^w个字节,即4GB。
数据大小
C声明 |
char |
short |
int |
long int |
long long int |
char * |
folat |
double |
32位机器 |
1 |
2 |
4 |
4 |
8 |
4 |
4 |
8 |
64位机器 |
1 |
2 |
4 |
8 |
8 |
8 |
4 |
8 |
寻址和字节顺序
通常情况下,对于程序员来说,字节顺序是不可见的,对程序的运行结果也不会产生太大的影响,但有时候,不同类型的机器之间通过网络传输二进制数据时会发生字节反序的情况。
#### 大端法
最高有效字节在最前面
小端法
最低有效字节在最前面
移位运算
逻辑右移:左端补K个0
算术右移:左端补K个最高有效位的值
对于无符号数据,右移必须是逻辑的,对于有符号数据,逻辑和算术都可以。Java中对右移有着明确地定义:x»k执行算术右移,x»>k执行逻辑右移。
整数表示
无符号整数的表示用W位的值进行编码,每个无符号整数都有唯一的对应的编码;有符号整数的表示方式通常是补码
形式。
有符号整数,最高有效位是符号位,为1时表示负数,为0时表示非负。(详见P40)。