本文目錄一覽:
c語言是如何編譯成二進位
源代碼會經過預編譯—編譯—-彙編—–連接幾個步驟最終生成可執行文件.
1.預編譯,把源代碼中的宏展開並把包含的文件的源代碼插入程序的源代碼中.
2.編譯,把源代碼編譯成二進位的目標文件.但是此時目標文件還是不可執行的.
3.彙編,這一步主要是處理源代碼中的彙編代碼.
4.連接,把目標代碼和二進位的庫文件以及其它內容合併成最終的可執行文件.
如何用c語言實現十進位文件轉化成二進位文件?
10進位轉化為2進位的演算法非常簡單,不斷除以2,每次的餘數為低位數,直到數為0。
可使用簡單的遞歸實現這一過程。常式如下:
#includestdio.h
void fun(int i)//定義變數i;
{
if(i1)
fun(i/2);//變數i除2;
printf(“%d”,i%2);//輸出i除以2的餘數;
}
int main(){
int n;
scanf(“%d”,n);
fun(n);//調用遞歸函數
return 0;
}
C語言編程float型數據轉怎麼化為2進位數輸出?
在C++里,實數(float)是用四個位元組即三十二位二進位位來存儲的。其中有1位符號位,8位指數位和23位有效數字位。實際上有效數字位是24位,因為第一位有效數字總是「1」,不必存儲。有效數字位是一個二進位純小數。8位指數位中第一位是符號位,這符號位和一般的符號位不同,它用「1」代表正,用」0「代表負。整個實數的符號位用「1」代表負,「0」代表正。\x0d\x0a在這存儲實數的四個位元組中,將最高地址位元組的最高位編號為31,最低地址位元組的最低位編號為0,則實數各個部分在這32個二進位位中的分布是這樣的:31位是實數符號位,30位是指數符號位,29—23是指數位,22—0位是有效數字位。注意第一位有效數字是不出現在內存中的,它總是「1」。\x0d\x0a\x0d\x0a將一個實數轉化為C++實數存儲格式的步驟為:\x0d\x0a(1)先將這個實數的絕對值化為二進位格式,注意實數的整數部分和小數部分化為二進位的方法是不同的。\x0d\x0a(2)將這個二進位格式實數的小數點左移或右移n位,直到小數點移動到第一個有效數字的右邊。\x0d\x0a(3)從小數點右邊第一位開始數出二十三位數字放入第22到第0位。\x0d\x0a(4)如果實數是正的,則在第31位放入「0」,否則放入「1」。\x0d\x0a(5)如果n是左移得到的,說明指數是正的,第30位放入「1」。如果n是右移得到的或n=0,則第30位放入「0」。\x0d\x0a(6)如果n是左移得到的,則將n減去一然後化為二進位,並在左邊加「0」補足七位,放入第29到第23位。如果n是右移得到的或n=0,則將n化為二進位後在左邊加「0」補足七位,再各位求反,再放入第29到第23位。\x0d\x0a\x0d\x0a將一個計算機里存儲的實數格式轉化為通常的十進位的格式的方法如下:\x0d\x0a(1)將第22位到第0位的二進位數寫出來,在最左邊補一位「1」,得到二十四位有效數字。將小數點點在最左邊那個「1」的右邊。\x0d\x0a(2)取出第29到第23位所表示的值n。當30位是「0」時將n各位求反。當30位是「1」時將n增1。\x0d\x0a(3)將小數點左移n位(當30位是「0」時)或右移n位(當30位是「1」時),得到一個二進位表示的實數。\x0d\x0a(4)將這個二進位實數化為十進位,並根據第31位是「0」還是「1」加上正號或負號即可。\x0d\x0a\x0d\x0a特別地,實數0用C++的float格式表示是00000000000000000000000000000000。\x0d\x0a\x0d\x0a如果還不太明白,這裡舉幾個例子。\x0d\x0a一。將23.56化為C++的float格式。\x0d\x0a(1)將23.56化為二進位後大約是「10111.1000111101011100001」。\x0d\x0a\x0d\x0a****首先將一個小數如:235.725的小數部分取出,即:0.725,將其乘以進位數二進位就乘以2後得到1。45,取其整數部分1為二進位小數的第一項(十分位),在將小數部分0。45乘2得0。9,取其整數部分為二進位小數的第二位(百分位)0,在將其小數部分0。9乘2,得1。8,取其整數部分為二進位小數的第三位(千分位)1,取其小數部分0。8再乘2??以此類推,直到值為0或形成循環小數則停止。\x0d\x0a\x0d\x0a(2)將小數點左移四位,得到「1.01111000111101011100001」。\x0d\x0a(3)這已經有了二十四位有效數字,將最左邊一位「1」去掉,得到「01111000111101011100001」。將它放入第22到第0位。\x0d\x0a(4)因為23.56是正數,因此在第31位放入「0」。\x0d\x0a(5)由於我們把小數點左移,因此在第30位放入「1」。\x0d\x0a(6)因為我們是把小數點左移4位,因此將4減去1得3,化為二進位,並補足七位得到0000011,放入第29到第23位。\x0d\x0a完畢。\x0d\x0a如果把最左邊定為第31位,最右邊定為第0位,那麼在C++里,float格式的23.56是這樣表示的:01000001101111000111101011100001。相應地-23.56就是這樣表示的:11000001101111000111101011100001。\x0d\x0a\x0d\x0a二。將實數0.2356化為C++的float格式。\x0d\x0a(1)將0.2356化為二進位後大約是0.00111100010100000100100000。\x0d\x0a(2)將小數點右移三位得到1.11100010100000100100000。\x0d\x0a(3)從小數點右邊數出二十三位有效數字,即11100010100000100100000放入第22到第0位。\x0d\x0a(4)由於0.2356是正的,所以在第31位放入「0」。\x0d\x0a(5)由於我們把小數點右移了,所以在第30位放入「0」。\x0d\x0a(6)因為小數點被右移了3位,所以將3化為二進位,在左邊補「0」補足七位,得到0000011,各位取反,得到1111100,放入第29到第23位。\x0d\x0a完畢。因此0.2356用C++的float格式表示是:00111110011100010100000100100000。其中最左邊一位是第31位,最右邊一位是第0位。\x0d\x0a\x0d\x0a三。將實數1.0化為C++的float格式。\x0d\x0a(1)將1.0化為二進位後是1.00000000000000000000000。\x0d\x0a(2)這時不用移動小數點了,這就是我們在轉化方法里說的n=0的情況。\x0d\x0a(3)將小數點右邊的二十三位有效數字00000000000000000000000放入第22到第0位。\x0d\x0a(4)因為1.0是正的,所以在第31位里放入「0」。\x0d\x0a(5)因為n=0,所以在第30位里放入「0」。\x0d\x0a(6)因為n=0,所以將0補足七位得到0000000,各位求反得到1111111,放入第29到第23位。\x0d\x0a完畢。所以實數1.0用C++的float格式表示是:00111111100000000000000000000000。其中最左邊一位是第31位,最右邊一位是第0位。
十進位如何轉二為二進位?(C語言)
c語言編程將十進位轉化為2進位可按手工轉換規則進行程序轉換。
整數佔四個位元組,每位元組8位,共32位。所以,可以定義一個32位的數組來存儲轉換結果。
循環將整數進行除2取餘數,餘數存儲到數組中。
當整數整除為0時,結束循環
逆序輸出數組,得到轉換結果
參考代碼:
#include stdio.h
void main()
{
int c[32],i=0,n;
scanf(“%d”, n) ; //輸入待轉換整數n
do {
c[i++]=n%2;
n/=2;
} while(n!=0) ;
for(i–;i=0;i–)
printf(“%d”,c[i] );
printf(“\n”);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198635.html