在C语言中,整数有三种表现形式:十进制、八进制、十六进制。
其中以数字0开头,由0~7组成的数是八进制。
以0X或0x开头,由0~9,A~F或a~f 组成是十六进制。
除表示正负的符号外,以1~9开头,由0~9组成是十进制。
1.十进制:除表示正负的符号外,以1~9开头,由0~9组成。如,128,+234,-278。2,八进制:以0开头,由0~7组成的数。如,0126,050000.3,十六进制:以0X或0x开头,由0~9,A~F或a~f 组成。如,0x12A,0x5a000。
二进制转8进制或
16进制可以直接用
BCD码就是8421算法。有效位乘以
BCD码,如101101001(2)转换8进制就是3位一组先分开101 101 001 然后分别算出第一组101=1乘4加0乘2加1乘1。结果就是5(8)剩下两组一样的方法结果就是551(8)。
二进制转16进制方法同,以101101001为例,从右到左,每4位一组,不足的位数用0补齐,则是 0001 0110 1001
0001=8*0+4*0+2*0+1*1=1 0110=8*0+4*1+2*1+1*0=6 1001=8*1+4*0+2*0+1*1=9, 所以二进制101101001转换成16进制就是169。
八进制转换成十六进制
二进制转16进制方法同,以101101001为例,从右到左,每4位一组,不足的位数用0补齐,则是 0001 0110 1001
0001=8*0+4*0+2*0+1*1=1 0110=8*0+4*1+2*1+1*0=6 1001=8*1+4*0+2*0+1*1=9, 所以二进制101101001转换成16进制就是169。
八进制化为二进制 规则:按照顺序,每1位
八进制数改写成等值的3位二进制数,次序不变。 例: (17.36)8 = (001 111 .011 110)2 = (1111.01111)2
八进制转换成十六进制
八进制转换成十六进制算法通常有两种方法,一种是先将
八进制转换成二进制,再将
二进制转换成十六进制,一种是先将
八进制转换成十进制,再将十进制转换成十六进制。假如
八进制数为347,先用第一种方法,转换成二进制为011,100,111,再转换成十六进制为E7;第二种方法先转换成十进制为231,再将十进制转换成十六进制为E7。
二进制转换十进制
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:101100100,转换为10进制为:356
用横式计算
0×2
0+0×2
1+1×2
2+0×2
3+0×2
4+1×2
5+1×2
6+0×2
7+1×2
8=356
0乘以多少都是0,所以我们也可以直接跳过值为0的位:
1×2
2+1×2
5+1×2
6+1×2
8=356
4+32+64+256 =356
八进制转换十进制
八进制就是逢8进1。
八进制数采用 0~7这八数来表达一个数。
八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……
所以,设有一个八进制数:1507,转换为十进制为:839,具体方法如下:
可以用横式直接计算:
7×8
0+0×8
1+5×8
2+1×8
3=839
也可以用竖式表示
第0位 7×8
0=7
第1位 0×8
1=0
第2位 5×8
2=320
第3位 1×8
3=512
十六进制转换十进制
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是数β (β大于等于0,并且β小于等于 15,即:F)表示的大小为 β×16的N次方。
假设有一个十六进数 2AF5
直接计算就是:
也可以用竖式表示:
第0位: 5×16
0=5
第1位: F×16^1=240
第2位: A×16
2=2560
第3位: 2×16
3=8192
由于 十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
由于 十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:
被除数 计算过程 商 余数
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4
结果16进制为:4D2
然后我们可直接写出4D2的二进制形式:
0100
|
1101
|
0010
|