十进制数和二进制数之间的转换
生活随笔
收集整理的這篇文章主要介紹了
十进制数和二进制数之间的转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? 十進制轉換為二進制數需要利用除k取余法,其中有循環和遞歸二中算法,下面看一下代碼:
遞歸版:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>//將一個十進制的數轉換成一個二進制的數 void chu_k(int a,char str[],int &last) {int k = 0;int m = 0;int i = 0;if(a <= 1){last = a;//保留此時的余數return;}else{m = a % 2;str[last++] = m + '0';chu_k(a/2,str,last);} }int main() {int a = 123;int length = 0;char str[20] = {0};int last = 0;chu_k(a,str,last);length = strlen(str);str[length] = last + '0';length = strlen(str)-1;int i = length;for(;i>=0;i--){printf("%c",str[i]); }return 0; }打印:1111011
在參數傳值的時候是傳整型數還是傳字符串取決于傳哪種更方便,最后在根據需要對整型和字符串之間相互轉換,chu_k函數是先保存余數在遞歸,所有最后打印出來的一個逆序的,最后要把結果倒敘輸出才是正確的。
?
循環版:
int main() {int c[32] = {0};int i = 0;int n = 123;do{c[i++] = n%2;n /= 2;}while(n != 0);i = i - 1;for(;i>=0;i--){printf("%d",c[i]);}return 0; }循環版用的是整型數組,比用字符串數組略簡單,而且循環比遞歸更容易理解,看起來更簡單。
?
看下二進制轉十進制:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>//將一個十進制的數轉換成一個二進制的數void func(char str[],int &result) {int length = strlen(str);int i = length-1;int m = 0;for(;i >=0;i--){if(str[i]){m = m + pow(2,length-i-1) * (str[i] - '0');}}result = m; }int main() {int result = 0;char str[]="1111011";func(str,result);printf("last=%d\n",result);return 0; }打印:123
這個還需要大家細讀二進制轉十進制的數學方法,程序也是按照數學方法寫的。
注意這張圖中1010對應字符串來說是逆序的
?
總結
以上是生活随笔為你收集整理的十进制数和二进制数之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。