其它进制的常量
我们最常见的是十进制的数,还有二进制我们也接触过。
十进制是以 10 为基底,由 0-9 这十个数组成。
十六进制常量
也可以用十六进制编写整数,即以 16 为基底。
十六进制使用的数字等价于十进制里的 0~15,其中 10-15 使用英文字母 A-F 或者小写 a-f 来代替(0-9 a-f)。
为了和十进制区分,十六进制前面加 0x 或者 0X。
比如 0x99。十六进制同样可以有后缀:
下面是一些实例:
0xFFFF 0xdead 0xfade 0xFade 0x123456EE 0xafL 0xFABABULL
最后一个例子的类型是 unsigned long long,倒数第二个是 long。
十六进制常量常用来表示位模式,因为每一个十六进制的数对应四个二进制位,而两个十六进制的数指定一个字节。
八进制常量
八进制是以 8 为基底。八进制数字为 0-7,对应于二进制的三位。
八进制数起源于计算机内存采用 36 位字的时代,那时候一个字是三位组合。因此 36 位二进制可以写成 12 个八进制数。
八进制现在很少使用,但是需要知道它们,主要是为了避免无意中错误使用。
八进制是以 0 开头的整数常量。例如 014,会被计算机编译器看做八进制。因此 014 等价于十进制里面的 12。
所以不要在整数前随意加 0。
代码示例
#include <stdio.h>
int main(void)
{
printf("%d\n",0x99);
printf("%d\n",014);
return 0;
}Code language: PHP (php)
输出结果
153
12
代码说明
0x99是十六进制常量,转换为十进制:9×16 + 9 = 153。014是八进制常量,转换为十进制:1×8 + 4 = 12。- 使用
%d格式符以十进制形式输出。
核心要点
| 进制类型 | 前缀 | 数字范围 | 示例 | 十进制值 |
|---|---|---|---|---|
| 十六进制 | 0x 或 0X | 0-9, a-f, A-F | 0x99 | 153 |
| 八进制 | 0(零) | 0-7 | 014 | 12 |
注意:八进制以 0 开头,因此日常写十进制整数时千万不要在前面加 0,否则编译器会将其解析为八进制而导致逻辑错误。