我是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 :(得分:1)
麻烦是您要添加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));
}
答案 1 :(得分:1)
问题是您要向后转换,整数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);
答案 2 :(得分:0)
感谢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);