圖片檔由此下載:
先備知識:C語言運算符號使用 (如%) 以及迴圈 (for)
#include<stdio.h>
int main(void)
{
問題:如何換算十進位數,到二進位數?
>> Step_0:先備知識~
十進位: 27549 --> 2*10000 + 7*1000 + 5*100 + 4*10 + 9*1 底數是10
二進位: 10111 --> 1*(2^4) + 0*(2^3) + 1*(2^2) + 1*(2^1) + 1*(2^0) 底數是2
留意兩者的相似性,十進位的底數都是 10^n,而二進位是 2^n
如果要得到 5 ,省略掉前面更大的數,然後除以 100
>> Step_1:如何拆解十進位,得到每個位數? (兩種解決方法)
直觀上 - 方法_1:
int x = 27549;
int a, b, c, d, e;
a = x / 10000; --> 2
b = (x % 10000)/1000; --> 7
c = (x % 1000)/100; --> 5
d = (x % 100)/10; --> 4
e = (x % 10)/1; --> 9
較不直觀 - 方法_2:
int x = 27549;
int a, b, c, d, e;
e = x % 10; 27549 % 10 --> 9
d = (x /10) % 10; 2754 % 10 --> 4
c = (x /100) % 10; 275 % 10 --> 5
b = (x /1000) % 10; 27 % 10 --> 7
a = (x /10000) % 10; 2 % 10 --> 2
一個是改變除數,另一個是改變被除數,
方法_2 比較不直觀,但搭配 for 時比較好寫一點點~
>> Step_2:進入到 for 迴圈!
方法_1:
int x = 27549;
int i, k, pow = 1;
for (i=1; i<=5; i++){
k = x % (pow*10) /pow; pow從 1 開始除, k 會依序得到結果
pow *= 10;
}
對照前面的作法,不過是顛倒過來從小的開始做起
註:第44行不需要加( ),因為 % 和 / 是由左到右執行
方法_2:
int x = 27549;
int i, k;
for (i=1; i<=5; i++){
k = x % 10;
x /= 10;
}
兩者比較起來,
方法_2 可以少宣告一個變數,而且文字量比較少,不過就是不太直觀 XD
>> Step_3:那二進位呢?
其實非常簡單,只是底數的轉換而已,把上面的 10 改成 2 就好了
方法_1:
int x = 27549;
int i, k, pow = 1;
for (i=1; i<=31; i++){
k = x % (pow*2) /pow;
pow *= 2;
}
方法_2:
int x = 27549;
int i, k;
for (i=1; i<=31; i++){
k = x % 2;
x /= 2;
}
這裡 i 一直跑到 31 ,是因為不確定轉換成二進位會有多少位數,所以取到 2^30
return 0;
}
文章標籤
全站熱搜
留言列表