2016-02-28 57 views
-1

我正在使用下面的方法將小數轉換爲二進制。 該方法需要一個長類型作爲參數並返回二進制等效。 但是,如果像「2147483647L」這樣的值作爲參數傳遞,它會返回一些垃圾值。 我在這段代碼中錯過了什麼?長整數的小數轉換爲二進制

public long calculateBinary(long N){ 
     long m=N, s=0, i=0; 
     while(m>0) 
     { 
      long k=m%2; 
      s=(long)((Math.pow(10,i)*k)+s);   
      i++; 
      m=m/2; 
     } 
     return s; 
    } 
+2

如果你實際返回的是一個'long',其十進制表示_看起來像另一個數字的二進制擴展,在通過'long'的最大尺寸之前不會花很長時間。 – khelwood

+0

在返回語句中使用BigInteger或String! – Devavrata

+1

如果您嘗試手動創建數字的二進制表示形式,則應該返回一個字符串。 – khelwood

回答

0

未經測試的代碼,其中考慮到符號和二進制表示:

public String calculateBinary(long N) { 
    boolean direction = (N >> 63 === 0); 
    String result = (direction ? "" : "-"); 
    for (int bits = 0; bits < 63; bits++) { 
     result += direction ? ((N << (1 + bits)) >> 63) : (1 - ((N << (1 + bits)) >> 63)); 
    } 
    return result; 
} 

這是不準確的說,long已經轉換成二進制,因爲在計算表示之間的巨大差異的二進制數和它們的有效值,因爲一個長變量的二進制表示不同於數字的有效數學二進制表示,以防數字爲負數。

相關問題