预计阅读本页时间:-
计算机世界通常使用基于八和十六的数制系统。因为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的这些特性。