c语言中二进制转十进制详解
1.字符與字符代碼
字符與字符代碼并不是任意寫一個字符,程序都能識別的。例如代碼圓周率的π在程序中是不能被識別的,只能使用系統的字符集中的字符,目前大多數系統采用ASCII字符集。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數字字符‘1’的ASCII代碼是十進制數49,二進制形式是0110001。其中我們需要知道的是‘1’和1是不同的概念。字符‘1’只是表示一個形狀為‘1’的符號,在需要時按原樣輸出,在內存中以ASCII碼形式存儲,占一個字節;整數則是以整數的方式存儲,占2個或4個字節。整數1+1=2,而字符‘1’+‘1’并不等于整數2或字符‘2’。
?2.二進制轉十進制
#include<stdio.h> #pragma warning(disable:4996) #define N 16 int fun(char s[]) {int i,sum=0;for(i=0;s[i]!='\0'&&i<N;i++)sum=2*sum+(s[i]-48); //這里的48等價于'0'return sum; } int main() {char num[]="10011";int n;n=fun(num);printf("%s-->%d\n",num,n); }3.程序分析
其實這個程序的核心就是? sum=2*sum+(s[i]-48);? 這個算法是比較巧妙的,我們一步一步來解剖。前面我們提到了字符運算并不像整數運算,那這里我們首先需要把存放在數組里的字符轉化成整數也就是s[i]-48。那么2*sum又是怎么來的呢?其實本質還是由二進制轉十進制的算法得來。我們可以舉個例子
X1+X2*2^1+X3*2^2+X4*2^3+X5*2^4
=X1+2(X2+2(X3+2(X4+2X5)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這樣我們就把他們轉化成2*sum的形式了也就等價于sum=2*sum+i(這里是從高位也就是從左至右開始讀取)當sum=0時這里的i等于x5,接下來就是一個累加的過程了,最終的sum就是二進制轉化為十進制的數值。
4.總結
其實我自己也想了一些時間,還是基礎不夠扎實,用到了字符、ASCII碼和累加等等,也告誡我們更有技巧性的東西其實都是從本質推算出來的,還是那句老話,萬變不離其宗。
?
?
總結
以上是生活随笔為你收集整理的c语言中二进制转十进制详解的全部內容,希望文章能夠幫你解決所遇到的問題。