【基础】进制转换
1、什么是二进制、八进制、十进制、 十六进制?
我们平常生活中常用的是10进制,就是逢10进1;
二进制:逢二进一 由0、1组成;
八进制:逢八进一 由0-7组成; 前面以o开头的数字表示八进制 在c语言中用%o
十进制:逢十进一 由0-9组成; 在c语言中用%d
十六进制:逢十六进一 由0-15组成,10-15分别对应A-F; 前面以ox开头的数字表示十六进制 在c语言中用%x
2、二进制、八进制、十六进制与十进制间的转换
(1)二进制、八进制、十六进制转十进制间
十进制的表达如:(12345)10 =1*104+2*103+3*102+4*101+5*100=12345
八进制转换为十进制:(12345)8=1*84+2*83+3*82+4*81+5*80=5349
二进制转十进制:(10101)2=1*24+0*23+1*22+0*21+1*20=21
十六进制转十进制:(1F2A5)16=1*164+15*163+2*162+10*161+5*160=127653
(2)十进制间转二进制、八进制、十六进制
十进制转二进制:用10进制的数一直除以2,直到除数小于2为止,然后把余数倒序排列
25/2 ---------12余1
12/2 ---------6余0
6/2 ---------3余0
3/2 ---------1余1
1
倒序排列得到(25)10=(11001)2
十进制转八进制:同理用10进制的数一直除以8,直到除数小于8为止,然后把余数倒序排列
168/8 ----------16余0
16/8 ----------2余0
2
(168)10=(200)8
十进制转十六进制:同理用10进制的数一直除以16,直到除数小于16为止,然后把余数倒序排列,大于10-15的数字用A-F表示
127653/16 ----------7978余5
7978/16 ----------498余10 (10用A表示)
498/16 ------------31余2
31/16 ------------1余15 (15用F表示)
1
(127653)10=(1F2A5)16
补充:用程序实现任一十进制整数转换为二进制和十六进制树(这是我去超图的机试题,我当时用C#实现的,下面用C语言实现)
#include<stdio.h> #include<stdlib.h> void toletter(int num) { switch (num) { case 10: printf("%c", 'a'); break; case 11: printf("%c", 'b'); break; case 12: printf("%c", 'c'); break; case 13: printf("%c", 'd'); break; case 14: printf("%c", 'e'); break; case 15: printf("%c", 'f'); break; default: printf("%d", num); break; } } //十进制转二进制 void convertto2(int num) { if (num ==1|| num==0) { printf("%d",num); } else { int n=num / 2; convertto2(n); printf("%d",num %2); } } //十进制转八进制 void convertto8(int num) { if (num < 8) { printf("%d", num); } else { int n = num / 8; convertto8(n); printf("%d", num % 8); } } //十进制转十六进制 void convertto16(int num) { if (num<16) { toletter(num); } else { int n = num / 16; convertto16(n ); toletter(num % 16); } } void main() { int num; printf("请输入一个整数"); scanf_s("%d",&num); printf("\n十进制转二进制:"); convertto2(num); printf("\n十进制转八进制:"); convertto8(num); printf("\n十进制转十六进制:"); convertto16(num); system("pause"); }
3、二进制与八进制的互相转换
二进制表示八进制,二进制用三位(23=8)表示八进制的数,如下:
二进制 八进制
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
(1)八进制转二进制:把每一位八进制的数换为三位的二进制。如下:
(123)8= 001 010 011=(1010011)2
(2)二进制转八进制:从低位到高位分成3位为一组,高位不够三位的用0补齐,然后替换三位二进制位为八进制的数。如下:
(1010011)2= 1 010 011 = 001 010 011=(123 )8
4、二进制与十六进制的互相转换
二进制表示十六进制,二进制用四位(24=8)表示十六进制的数,如下:
二进制 十六进制 二进制 十六进制
0000 0 0001 1
0010 2 0011 3
0100 4 0101 5
0110 6 0111 7
1000 8 1001 9
1010 A 1011 B
1100 C 1101 D
1110 E 1111 F
(1)十六进制转二进制:把每一位十六进制的数换为四位的二进制。如下:
(1A2B3C)16=0001 1010 0010 1011 0011 1100=(110100010101100111100)2
(2)二进制转十六进制:从低位到高位分成4位为一组,高位不够4位的用0补齐,然后替换4位二进制位为十六进制的数。如下:
(110100010101100111100)2=1 1010 0010 1011 0011 1100=(1A2B3C)16
5、小数的进制转换
小数的10进制转2进制方法:乘以2取整,再顺序排列,如下:
0.625*2 =1.25 取1
0.25*2=0.5 取0
0.5*2=1.0 取1
(0.625)10=(0.101)2
(0.5)10=(0.01)2
【C语言基础】