C语言进制转换
- 为什么使用二进制、八进制、十六进制?
因为目前的CPU只能识别高低两种电平,只能对二进制数据进行计算
二进制虽然能够直接被计算机识别,但是不方便人去书写和记录,因此就把二进制数据转换成八进制,方便记录到文档中
随着CPU的位数的不断增加,已经到目前的64位,所以八进制不再能够满足需求,因此发展出现在的十六进制,由于历史原因八进制还不能退出历史舞台 - 十进制转二进制(其它进制)
求余法:
用2不停地对数据求余,然后继续对商求余,直到商为0结束,在过程中得到的余数(逆序)就是该数据的二进制
127 % 2 1
63 % 2 1
31 % 2 1
15 % 2 1
7 % 2 1
3 % 2 1
1 % 2 1
0
0111 1111
求权法:
让数据从高位n位开始,数据 - 2^(n-1) ,如果够减,那么第n位为1,否则为0,直到减完为止
134
128 64 32 16 8 4 2 1
1 0 0 0 0 1 1 0 - 二进制转十进制
每位乘以权位2^(n-1),求和
10011001 128+16+8+1 - 二进制转八进制
从低位起,每三个二进制位对应一个八进制位
二进制:10 101 110 111 100
八进制:2 5 6 7 4 - 二进制转十六进制
从低位起,每四个二进制位对应一个十六进制位
二进制: 10 1011 1011 1100
十六进制: 2 B B C - 不同进制在程序的显示:
在C代码中,以0开头的数据是八进制数据,以0x/0X开头的是十六进制数据
%x 让数据以十六进制显示
%o 让数据以八进制显示
%#x %#o 显示出数据对应的进制前缀