Java - 使用按位运算符的十进制到二进制(反之亦然)

问题描述 投票:-2回答:1

顺便说一句,我是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();
    }
}

十进制二进制转换的输出(我必须截取这个,因为当我复制它时,它只是空格):

New output for Decimal-Binary Conversion

java binary decimal
1个回答
1
投票

首先,你的循环没有执行。您应该使用调试器或添加print语句来调试代码。例如,您创建大小为32个元素的数组outputbinaryString,然后循环:for (int i = 32; i > binaryString.length ; i--)。您的循环体将永远不会执行,并且您的数组output将不会被填充。当您返回它时,它仍然具有默认值0,这在控制台中是不可打印的。

其次,使用Integer.toBinaryString可能是作弊。如果我们允许你返回一个班轮:Integer.toBinaryString(num).toCharArray()并完成它。

© www.soinside.com 2019 - 2024. All rights reserved.