[C語言] 十進位轉換成二進位數
它Highlight 的不是很好看~
如果嫌不好看可以複製貼近編輯器裡面!
或者可以直接下載圖片檔:
https://drive.google.com/open?id=1TGpW-cHPxPm8xw5ptX4xfQCfNc9fvnwQ
先備知識: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; }