十進位制轉二進位制(C

2021-06-26 16:57:09 字數 926 閱讀 3169

十進位制轉換二進位制其實不是個複雜的問題,我們首先搞清楚原理:

整數部分:如果不是0,不斷除2,直到除到1為止,得到的餘數最後逆向排列輸出;如果是0,直接輸出

小數部分:小數部分m非0,則不斷乘2,如果2*m超過1,則輸出1,m=2*m-1;如果2*m不超過1,m=2*m

由於很多小數是無法完全轉換為二進位制的(比如0.7),為了避免死迴圈,我們需要得到乙個精度(保留多少位小數)

以下是**

#include using namespace std;

void convert_binary_integer(int n)

}void convert_binary_decimal(double m,int i)

else

else

}}int main()

cout<<"轉換後為:";

convert_binary_integer(num);

if(m!=0)

return 0;

}

**是很容易理解的。由我上面的說明大家很容易想到,有兩種方法,一種是我寫的遞迴,另一種是棧(有興趣的讀者可以自己嘗試一下)。

程式是很容易,但是背後蘊含了一些問題,比如0.7顯然是無法完全表示為二進位制小數的,但輸入0.7和100之後顯示的後面n位都是0,這是怎麼回事呢?

我們知道計算機內部的小數都是通過浮點數形式來表示,所以浮點數不是乙個精確的值,好比我輸入乙個0.5,它未必就是0.5,有可能它是以0.49999999999998進行儲存的,只不過顯示出來是0.5而已,所以一次乘法不成問題,但是進行了50次,100次之後,當初那個0.5和0.49999999999998被放大很多了,所以會導致一些計算上的問題。這是系統誤差,我本人不知道如何避免。但如果想要真正高精度的話,讀者們不妨自己寫乙個小數類(這個小數類只要能儲存、輸出,還能執行*2或*2-1就可以了。

十進位制轉二進位制(C )

相信大家應該都知道,十進位制轉k進製的方法常用的就是除k取餘的方法,這裡針對這個方法,給出了c 的 需要注意的是,除二取餘的方法,對於餘數的選取是從後往前取的,所以在 中,也要解決這個問題才行。模仿不停地除2的過程,每次除2之後用 取餘數i 用 作為下一次除2的被除數temp j初始化為1,每次除了...

二進位制轉十進位制(C )

輸入八位二進位制資料轉成十進位制 思想 逐位讀入輸入的八位二進位制,判斷該位是否為 1 若為1,則該位值為2的 i 次方 該位為第 i 位 每位對應值累加結果為所求十進位制 輸入11011010,讀入第乙個資料為1,第七位 從右往左,0到7 對應值為2的7次方即128 第二個資料為1,第六位,對應值...

二進位制轉十進位制

二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...