C語言演算法之將十進位制數轉換成二進位制數
阿新 • • 發佈:2019-01-10
導語:在C語言中沒有將其他進位制的數直接輸出為二進位制數的工具或方法,輸出為八進位制數可以用%o,輸出為十六進位制可以用%x,輸出為二進位制就要我們自行解決了。下面給大家講述一下如何程式設計實現將十進位制數轉換成二進位制數。
先將原始碼展示給大家:
#include <stdio.h> void main() { //進位制轉換函式的宣告 int transfer(int x); int x; printf("請輸入一個十進位制數:"); scanf("%d",&x); printf("轉換成二進位制數是:%d\n",transfer(x)); } int transfer(int x) { int p=1,y=0,yushu; while(1) { yushu=x%2; x/=2; y+=yushu*p; p*=10; if(x<2) { y+=x*p; break; } } return y; }
具體演算法體現在函式體內,使用了一個while(1)的死迴圈,當結果產生後跳出迴圈。變數yushu是每一次迴圈內產生的餘數,變數x每次迴圈都會被賦予新的值,這個新的值就是每一次迴圈內產生的商。當產生的商小於2時即產生了最後的結果(二進位制數),然後跳出迴圈。
例如:函式自變數若為7,用自變數7除以2,得到第一次迴圈產生的餘數為1,第一次迴圈產生的商為3;用第一次迴圈產生的商3除以2,得到第二次迴圈產生的餘數為1,第二次迴圈產生的商為1。
變數y的存放也是有一定技巧的,由於每次產生的餘數都小於2並且都是最後二進位制數中需要按位展現出來的,因此每一次迴圈產生的餘數都要合理地進行存放。第一次產生的餘數放在個位,第二次產生的餘數放在十位,第三次產生的餘數放在百位......依次類推,直至某一次迴圈產生的商小於2,最後再把小於2的那個商放在最高位。變數p的作用就是控制位數,變數y的初始值定為0,變數p的初始值定為1,每次迴圈內變數p都自乘10,每次迴圈內都讓變數y加上yushu*p,這樣就實現了餘數的按位存放。最後將小於2的那個商乘以p加到變數y中,得到最後的二進位制數。
例如:還是以自變數7為例,第一次迴圈後y的值為1,第二次迴圈內if語句之前y的值為11,if語句內y的值變為111,111即為7的二進位制數。
注意:變數p的自乘要放在變數y加上yushu*p之後!順序不能顛倒!