八进制和十六进制计数系统在表达与计算机相关的值时很方便。(C语言默认整数类型int常量是十进制的数)例如:十进制数35536经常出现在16位机中,用十六进制表示正好是10000。另外,十六进制数的每一位的数恰好由4位二进制数表示。例如:十六进制的5是0101。因此,十六进制数35的位组合是0011101,十六进制数53的位组合是01010011.这种对应关系使得十六进制和二进制的转换非常方便。
计算机是如何分清10000是十进制、十六进制还是二进制的呢?
在C语言中,用特定的前缀表示使用的是哪种进制。
0x或者0X前缀表示的是十六进制,十进制数16表示成十六进制就是0x10或者0X10。
0前缀表示八进制,十进制数16表示成八进制就是020。
使用不同的进制数是为了方便,不会影响数被存储的方式。换句话说,无论把数字写成16、020还是0x10,存储该数的方式都是一样的,计算机内部都是以二进制进行编码的。
显示八进制和十六进制
在C程序中,既可以使用和显示不同进制的数。不同的进制要使用不同的转换说明。
用十进制显示数字---> %d
用八进制显示数字---> %o (不是数字0,是字母o)
用十六进制显示数字---> %x
如果要显示各进制数的前缀 0 0x 0X
分别使用 %o %#x %#X
/*十进制、八进制、十六进制 打印数字100*/
#include <stdio.h>
int main(void)
{
int x = 100;
printf("dec= %d; octal= %o; hex= %x\n",x,x,x);
printf("dec= %d; octal= %#o; hex= %#x\n", x, x, x);
return 0;
}
输出结果: