从十进制数转换时,最后出现在 1 之后的数字'0'在二进制数中丢失



我是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 并且没有真正构建正确的数字,你可以使用字符串来存储数字,最好使用 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 时,数字保持不变。 10 将保持 10,无论您向其添加多少次 0。

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);

最新更新