15.2 其他基数

计算机世界通常使用基于八和十六的数制系统。因为8和16都是2的幂,所以这些系统比十进制系统更接近于计算机的二进制系统。

15.2.1 八进制

八进制(octal)指以8为基数的数制系统。在该系统中,一个数中的不同位表示8的幂。您可以使用数字0到7。例如,八进制数451 (在C中写为0451)代表:

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

阅读 ‧ 电子书库

了解八进制的一个简便的方法是每个八进制位对应于3个二进制位。表15.1说明了这种对应关系。这种对应关系使两种系统间的转换变得容易。例如,八进制数0377在二进制中是11111111。其中我们使用011代替3,并舍去第一位的0;用111代替每个7。八进制惟一不方便的方面就是一个3位的八进制数需要用9位二进制数来表示,因此一个比0377大的八进制数需要多个字节来表示。请注意不能舍去内部的0:0173 是 01 111011,而不是 01 111 11。

表15.1 八进制数的等价二进制数

 

 

八进制 等价二进制数
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
15.2.2 十六进制

十六进制(hexadecimal,或hex)指以16为基数的数制系统。该系统使用16的幂,使用的数字是0到15。但是,因为没有单独的阿拉伯数字表示10到15,所以使用字母A到F来达到这个目的。例如,十六进制数A3F(在C中写为0×A3F)代表:

阅读 ‧ 电子书库

原是A代表10,F代表15。在C中,可以使用大写或小写字母表示附加的十六进制数字。因此,也可以将2623写为0×a3f。

每个十六进制位对应于一个4位的二进制数,因此两个十六进制位恰好对应于一个8位字节。第一个十六进制位表示高4位,第二个十六进制位表示低4位。这使十六进制适于表示字节值。表15.2显示了这个对应关系。例如,十六进制值0×C2可转换为11000010。相反,二进制值11010101可以被看作1101 0101,从而可转换为0×D5。

表15.2 十进制、十六进制和二进制等价数

 

 

十进制数 十六进制数 二进制等价数 十进制数 十六进制数 二进制等价数
0 0 0000 8 8 1000
1 1 0001 9 9 1001
2 2 0010 10 A 1010
3 3 0011 11 B 1011
4 4 0100 12 C 1100
5 5 0101 13 D 1101
6 6 0110 14 E 1110
7 7 0111 15 F 1111

现在您已经了解位和字节,那么让我们研究C对其进行的操作。C有两个工具帮助您对位进行操作。第一个工具是一套(6个)作用于位的位运算符。第二个工具是字段(field)数据形式,它使您可以访问一个int中的位。以下讨论将简述C的这些特性。