以下程序的输出结果是
main(){
int a=20;
printf("%d,%o,%x\n",a,a,a);
}
看到这个题目首先我们要明白%o 和 %x代表的是什么意思
%o代表的是输出该数字的八进制
%x代表的是输出该数字的十六进制
1.题目给出了 a=20这个十进制现在我们需要用十进制转八进制,这里我们采用的就是直接除8取余的方法
2.同理对于10进制转16进制我们也是采取除16取余的方法
3.相反,如果我们有一个十六进制那么怎么转成十进制、八进制呢?请看下面解释
(1)十六进制转十进制
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
例:2AF5换算成10进制:
用竖式计算:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2= 2560
第3位: 2 * 16^3 = 8192
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
(2)十六进制转二进制
由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,所以,我们可以得出简便的转换方法,将16进制上每一位分别对应二进制上四位进行转换,即得所求:
例:2AF5换算成2进制:
第0位: (5)16 = (0101) 2
第1位: (F)16 = (1111) 2
第2位: (A) 16 = (1010) 2
第3位: (2) 16 = (0010) 2
得:(2AF5)16=(0010.1010.1111.0101)2
(3)十六进制转八进制
先将十六进制转为二进制,再将二进制转为八进制