2010-10-17 66 views
30

任何人都可以請告訴我如何將這個浮點數:12.25轉換爲二進制? 我知道如何轉換「12」但不是0.25如何將浮點數轉換爲二進制?

任何幫助,非常感謝。 由於

+4

手動:)我可以在編程後做到這一點。 – 2010-10-17 18:06:53

+0

你想獲得'1100.01'? – SLaks 2010-10-17 18:08:05

+0

是的:)我需要知道如何計算0.25到二進制 – 2010-10-17 18:13:06

回答

21

保持由2小數點後數相乘,直到它變成1.0:

0.25*2 = 0.50 
0.50*2 = 1.00 

,其結果是在相反的順序是0.01

+0

我明白了,現在看起來是邏輯的,謝謝:) – 2010-10-17 18:33:22

+10

@Slim Black:小心:對於0.25等數字來說工作得很好,精確的二進制表示,但不是0.1的數字,而不是:0.1 * 2 = 0.2,0.2 * 2 = 0.4,0.4 * 2 = 0.8,0.8 * 2 = 1.6,0.6 * 2 = 1.2,0.2 * 2 = 0.4,...它永遠重複,結果是0.0(0011)(括號中的部分重複)。 – 2010-10-17 21:42:56

+0

@Slim Black:並注意,要以編程方式正確實現此功能,您需要使用十進制算術 - 請參閱我的文章http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/,具體部分dec2bin_f()。) – 2010-10-17 21:50:34

13

(d表示小數,B表示二進制)

  1. 12.25d是你的浮點數。
  2. 你用二進制編寫12d並將它從你的float中移除。剩下的只剩下 (.25d)。
  3. 你寫了點。
  4. 雖然餘數(0.25d)不爲零(和/或您需要更多數字),請將其乘以2( - > 0.50d),然後刪除並寫入點(0)左側的數字,並繼續與新的餘數(.50d)。
+0

是的,謝謝你回答:) – 2010-10-17 18:48:22

+1

如果我的float是5.1呢?做你的步驟,我陷入了一個無限循環,請幫助! – nautilusvn 2014-08-12 07:02:39

+2

@nautilusvn:因爲沒有2的冪也是10的倍數,該數字具有無限的數字序列。你可能想放棄你的計算。 – comonad 2014-08-20 11:48:03

1
x = float(raw_input("enter number between 0 and 1: ")) 

p = 0 
while ((2**p)*x) %1 != 0: 
    p += 1 
    # print p 

    num = int (x * (2 ** p)) 
    # print num 

    result = '' 
    if num == 0: 
     result = '0' 
    while num > 0: 
     result = str(num%2) + result 
     num = num/2 

    for i in range (p - len(result)): 
     result = '0' + result 
    result = result[0:-p] + '.' + result[-p:] 

print result #this will print result for the decimal portion 
+0

OP詢問如何手動執行此操作。 – 2015-01-17 17:13:22

+0

也許你也想添加引用到你從那裏得到的。這個Python代碼看起來很熟悉。 – 2016-01-18 04:49:27

8

考慮例如

下面轉換2.625爲二進制。

我們將分別考慮整數和小數部分。

The integral part is easy, 2 = 10. 

對於小數部分:

0.625 × 2 = 1.25 1 Generate 1 and continue with the rest. 
0.25 × 2 = 0.5  0 Generate 0 and continue. 
0.5  × 2 = 1.0  1 Generate 1 and nothing remains. 

所以0.625 0.101 =,和2.625 = 10.101。

有關更多信息,請參見this鏈接。

3

浮點值存儲在IEEE 754格式的格式中,所以我們不能直接轉換整數,字符轉換爲二進制格式。 但我們可以通過指針將float轉換爲二進制。

main() 
{ 
float a=7.5; 
int i,*p; p=&a; 
for (sizeof(int)*8-1;i>=0;i--) 
printf("%d",(*p)>>i&1); 
} 
OUTPUT::0 10000001 11100000000000000000000---space for better clarification not included in part of the program. 
+1

我知道老了,但是** i **在這裏的價值是什麼? – Michi 2017-05-20 08:29:28

相關問題