顺便说一句,我是Stack Exchange的新手 - 以为我会指出这一点。我在使用按位运算符(无模数或除法!!)将一个十进制数转换为二进制数的程序时遇到问题,并且在这种情况下符号无关紧要。问题是,我甚至不知道我到目前为止(见下文)它是否是第一个 - 我甚至无法读取输出!我正在使用IntelliJ 2017.3,我知道字格式并非如此。如果有人需要更多信息,我会提供。
代码(更新):
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class Main
{
public static char[] DecToBinary(int number)
{
// The output array that the binary version of "number" is stored in
char output[] = new char[32];
// The mask used to check if the bytes are all set
int mask = 1;
// The binary array used to store the binary number
char[] binaryString = new char[output.length];
char[] binary = Integer.toBinaryString(number).toCharArray();
// Storing the binary value in the binary string array
for (int i = binary.length - 1; i > 0; i--)
{
binaryString[i] = binary[i];
}
// Looping through the BS array, starting from the end of the array
// (so that the output looks something like this: 01111000 - that's 120 in Binary)
for (int i = 31; i > 0; i--)
{
// Checking if the bytes are all set using the AND operator
output[i] = binaryString[i];
if ((number & mask) == 0)
{
output[i] = '0';
} else if ((number & mask) != 0)
{
output[i] = '1';
}
mask >>>= 1;
}
// Storing the binary string in the output array
for (int i = 32; i > output.length; i--)
{
output[i] = binaryString[i];
}
mask = mask << 1;
// Return the output array
return output;
}
// To be developed...eventually.
public static int BinaryToDec(char number[])
{
int output = 0;
return output;
}
public static void println(String prefix, char array[])
{
System.out.print(prefix);
for (char c : array)
{
System.out.print(c);
}
System.out.println();
}
public static void print(String prefix, char array[])
{
System.out.print(prefix);
for (char c : array)
{
System.out.print(c);
}
}
public static void TestDecToBinary()
{
int valuesToTest[] = { 0, 1, -1, 100, -100, 2147483647, -2147483648 };
System.out.println(" Decimal Binary");
for (int index = 0; index < valuesToTest.length; ++index)
{
System.out.format("%11d ", valuesToTest[index]);
println("", DecToBinary(valuesToTest[index]));
}
}
public static void TestBinToDecimal()
{
char valuesToTest[][] = { { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' }, { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1' }, { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }, { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '0', '0', '1', '0', '0' }, { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '1', '1', '1', '0', '0' },
{ '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }, { '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' } };
System.out.println("Binary Decimal");
for (int index = 0; index < valuesToTest.length; ++index)
{
print("", valuesToTest[index]);
System.out.format(" %11d\n", BinaryToDec(valuesToTest[index]));
}
}
public static void main(String[] args)
{
/*File file = new File("myOutput.txt");
FileOutputStream fos;
try
{
fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}*/
TestDecToBinary();
System.out.format("\n\n");
TestBinToDecimal();
}
}
十进制二进制转换的输出(我必须截取这个,因为当我复制它时,它只是空格):
首先,你的循环没有执行。您应该使用调试器或添加print语句来调试代码。例如,您创建大小为32个元素的数组output
和binaryString
,然后循环:for (int i = 32; i > binaryString.length ; i--)
。您的循环体将永远不会执行,并且您的数组output
将不会被填充。当您返回它时,它仍然具有默认值0,这在控制台中是不可打印的。
其次,使用Integer.toBinaryString
可能是作弊。如果我们允许你返回一个班轮:Integer.toBinaryString(num).toCharArray()
并完成它。