[英]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.