計組實數轉換為二進位制,實數儲存轉換為十進位制

2021-10-04 08:27:52 字數 2637 閱讀 6326

在c++裡,實數(float)是用四個位元組即三十二位二進位制位來儲存的。其中有1位符號位8位指數字23位有效數字位。實際上有效數字位是24位,因為第一位有效數字總是「1」,不必儲存。 有效數字位是乙個二進位制純小數。8位指數字中第一位是符號位,這符號位和一般的符號位不同,它用「1」代表正,用」0「代表負。整個實數的符號位用「1」代表負,「0」代表正。

在這儲存實數的四個位元組中,將最高位址位元組的最高位編號為31,最低位址位元組的最低位編號為0,則實數各個部分在這32個二進位制位中的分布是這樣的:31位是實數符號位,30位是指數符號位,29—23是指數字,22—0位是有效數字位。注意第一位有效數字是不出現在記憶體中的,它總是「1」。

將乙個實數轉化為c++實數儲存格式的步驟為:

(1)先將這個實數的絕對值化為二進位制格式,注意實數的整數部分和小數部分化為二進位制的方法是不同的。

(2)將這個二進位制格式實數的小數點左移或右移n位,直到小數點移動到第乙個有效數字的右邊

(3)從小數點右邊第一位開始數出二十三位數字放入第22到第0位。

(4)如果實數是正的,則在第31位放入「0」,否則放入「1」。

(5)如果n 是左移得到的,說明指數是正的,第30位放入「1」。如果n是右移得到的或n=0,則第30位放入「0」

(6)如果n是左移得到的,則將n減去1然後化為二進位制,並在左邊加「0」補足七位,放入第29到第23位。如果n是右移得到的或n=0,則將n化為二進位制後在左邊加「0」補足七位,再各位求反,再放入第29到第23位。

將乙個計算機裡儲存的實數格式轉化為通常的十進位制的格式的方法如下:

(1)將第22位到第0位的二進位制數寫出來,在最左邊補一位「1」,得到二十四位有效數字。將小數點點在最左邊那個「1」的右邊。

(2)取出第29到第23位所表示的值n。當30位是「0」時將n各位求反。當30位是「1」時將n增1。

(3)將小數點左移n位(當30位是「0」時)或右移n位(當30位是「1」時),得到乙個二進位制表示的實數。

(4)將這個二進位制實數化為十進位制,並根據第31位是「0」還是「1」加上正號或負號即可。

特別地,實數0用c++的float格式表示是00000000000000000000000000000000。

如果還不太明白,這裡舉幾個例子。

一。將23.56化為c++的float格式。

(1)將23.56化為二進位制後大約是「10111.1000111101011100001」。

(2)將小數點左移四位,得到「1.01111000111101011100001」。

(3)這已經有了二十四位有效數字,將最左邊一位「1」去掉,得到「01111000111101011100001」。將它放入第22到第0位。

(4)因為23.56是正數,因此在第31位放入「0」。

(5)由於我們把小數點左移,因此在第30位放入「1」。

(6)因為我們是把小數點左移4位,因此將4減去1得3,化為二進位制,並補足七位得到0000011,放入第29到第23位。

完畢。如果把最左邊定為第31位,最右邊定為第0位,那麼在c++裡,float格式的23.56是這樣表示的:01000001101111000111101011100001。相應地-23.56就是這樣表示的:11000001101111000111101011100001。

二。將實數0.2356化為c++的float格式。

(1)將0.2356化為二進位制後大約是0.00111100010100000100100000。

(2)將小數點右移三位得到1.11100010100000100100000。

(3)從小數點右邊數出二十三位有效數字,即11100010100000100100000放入第22到第0位。

(4)由於0.2356是正的,所以在第31位放入「0」。

(5)由於我們把小數點右移了,所以在第30位放入「0」。

(6)因為小數點被右移了3位,所以將3化為二進位制,在左邊補「0」補足七位,得到0000011,各位取反,得到1111100,放入第29到第23位。

完畢。因此0.2356用c++的float格式表示是:00111110011100010100000100100000。其中最左邊一位是第31位,最右邊一位是第0位。

三。將實數1.0化為c++的float格式。

(1)將1.0化為二進位制後是1.00000000000000000000000。

(2)這時不用移動小數點了,這就是我們在轉化方法裡說的n=0的情況。

(3)將小數點右邊的二十三位有效數字00000000000000000000000放入第22到第0位。

(4)因為1.0是正的,所以在第31位里放入「0」。

(5)因為n=0,所以在第30位里放入「0」。

(6)因為n=0,所以將0補足七位得到0000000,各位求反得到1111111,放入第29到第23位。

完畢。所以實數1.0用c++的float格式表示是:00111111100000000000000000000000。其中最左邊一位是第31位,最右邊一位是第0位。

十進位制 轉換為 二進位制

聽說優酷前端面試有問進製數轉換的,甚至是負正整數轉換為二進位制,那就索性一次整個明白 正整數轉二進位制 負整數轉二進位制 小數轉二進位制 1 正整數轉成二進位制。口訣 除二取餘,倒序排列,高位補零。42 除以2得到的餘數 右邊 為010101,然後倒著排一下就是取到的二進位制了 如下圖 計算機內部表...

將負數轉換為二進位制

我們已經知道計算機中,所有資料最終都是使用二進位制數表達。我們也已經學會如何將乙個10進製數如何轉換為二進位制數。不過,我們仍然沒有學習乙個負數如何用二進位制表達。比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 000...

(string)十進位制 轉換為 二進位制

將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。輸入描述 多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bits的整數 輸出描述 每行輸出對應的二進位制數。輸入 013 8輸出 0111 1000 下面是王道上的解法,模擬的是...