一、什麼是二進制、八進制、十進制、 十六進制?spa
咱們日常生活中經常使用的是10進制,就是逢10進1;code
二進制:逢二進一 由0、1組成;blog
八進制:逢八進一 由0-7組成; 前面以o開頭的數字表示八進制 在c語言中用%oit
十進制:逢十進一 由0-9組成; 在c語言中用%dio
十六進制:逢十六進一 由0-15組成,10-15分別對應A-F; 前面以ox開頭的數字表示十六進制 在c語言中用%xclass
二、二進制、八進制、十六進制與十進制間的轉換基礎
(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"); }
三、二進制與八進制的互相轉換
二進制表示八進制,二進制用三位(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
四、二進制與十六進制的互相轉換
二進制表示十六進制,二進制用四位(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
五、小數的進制轉換
小數的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語言基礎】