簡體   English   中英

從十進制數字轉換時,最后出現在1之后的數字“ 0”在二進制數字中丟失

[英]Digit '0' that appears after 1 at last get lost in binary number while converting from decimal number

我是Java的初學者,正在學習將數字系統從一種轉換為另一種。 轉換時,我發現最后出現在1之后的數字“ 0”(零)沒有分配給二進制數。

當我將63個十進制數字轉換為二進制時,結果為111111; 沒錯,這里沒有問題,因為結果二進制值不包含任何零。

當十進制數字為42時,結果為10101,應該是101010,即最后一個在1之后的'0'未被分配。

當我將十進制數字64轉換為二進制時,本應顯示為1000000的結果變為1,即丟失1之后的全“ 0”(零)。

該代碼是否意味着最后出現在1之后的零是微不足道的,還是存在其他問題?

class DecToBin{
    public static void main(String[] args){
    int dec = 64;
    int bin=0,rem=0;
    while(dec!=0){
        rem=dec%2;
        bin=bin*10+rem;
        dec=dec/2;
    }
    System.out.println("In Binary = "+bin);
  }
}

麻煩的是您要添加0而不是真正建立正確的數字,您可以使用String來存儲數字,並且使用StringBuilder並執行以下操作會更好:

public static void main(String[] args) {
    int dec = 64;
    StringBuilder sb = new StringBuilder();
    int  rem = 0;
    while (dec != 0) {
        rem = dec % 2;
        sb.insert(0,rem);
        dec = dec / 2;
    }
    System.out.println("In Binary = " + sb.toString());
}

但是您可以使用Integer.toString(int i, int radix) Java中已經存在您想要做的事情:

public static void main(String[] args) {
    int dec = 64;
    System.out.println("In Binary = " + Integer.toString(dec,2));
}

問題是您正在向后轉換,並且整數010101與10101相同。嘗試使用32 + 3之類的東西,應該是100011,但是得到110001。

此外,字符串連接方法的性能極低,並且占用大量內存。 使用StringBuilder可以解決此問題。

int dec = 35;
// 32 = Most digits you'll ever need with an int.
StringBuilder binBuilder = new StringBuilder(32);
while (dec > 0) {
    int bit = dec & 1; // Using this instead of 'remainder' has higher performance.
    binBuilder.insert(0, bit != 0 ? '1' : '0');
    dec >>>= 1; // Using this instead of 'divide' keeps the 32nd bit.
}
String bin = binBuilder.toString();
System.out.println("In Binary = " + bin);

謝謝Mark建議使用“ StringBuilder”。

問題是,當您將任何數字添加到0時,數字保持不變。 不管您添加0多少次,10都會保持為10。

StringBuilder s=new StringBuilder("");
while(dec!=0)
{
    rem=dec%2;
    s.append(rem);
    dec=dec/2;
}
System.out.println("In Binary = "+s.reverse());

我提供的解決方案的工作原理是,它以一個空字符串開頭,然后繼續在該字符串的左側添加一個數字。

Integer.toString() //converts an integer to a string 
concat is used to add to strings.

如果在程序中需要使用該二進制數,則可以使用

int binary_number=Integer.parseInt(s);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM