我正在使用以下公式进行练习:给定自然数x> 0(具有n位),我们用xn−1…x0表示其在基数2中的表示。例如,在基数2中x = 8为1000,因此x3 = 1并且x2 = x1 = x0 = 0。

编写一个程序,将两个给定自然数x和y的基数2表示与相同的位数n混合。也就是说,打印xn-1 yn-1…x0 y0。

我有一个程序可以计算2个整数的二进制表达式,并将两个二进制文件一起打印。我需要做的是更改0和1的顺序。
例如,我输入2个数字(10、15),我将得到1010 1111,但是我想按以下顺序混合这些数字:


首先,我想要每个二进制数的第一位(11)
然后是每个二进制数的第二个数字(01)
每个二进制数的第三个数字(11)
每个二进制数的第四个数字(01)


我有这段代码可以打印2个十进制数字的二进制文件,但是缺少混合部分。我已经尝试过使用charAt(这就是为什么我使用Strings作为二进制数字的原因),但是我无法使其工作。

Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int num2 = scanner.nextInt();
        String bin = "";
        String bin2 = "";
        if (num > 0) {
            while (num > 0) {
                if (num % 2 == 0) {
                    bin = "0" + bin;
                } else {
                    bin = "1" + bin;
                }
                num = (int) num / 2;
            }
        } else if (num == 0) {
            bin = "0";
        }

        if (num2 > 0) {
            while (num2 > 0) {
                if (num2 % 2 == 0) {
                    bin2 = "0" + bin2;
                } else {
                    bin2 = "1" + bin2;
                }
                num2 = (int) num2 / 2;
            }
        } else if (num2 == 0) {
            bin2 = "0";
        }

        System.out.print(bin+bin2);

最佳答案

鉴于两个数字在二进制表示中应具有相同的长度,您可以通过以下两种方式进行混合。

这是将两个数字都转换为比特,然后进行混合

class Base2Mix1 {

    public static void main(String[] args) {
        int first = 10;
        int second = 15;

        String firstBits = baseTwoRepresentation(first);
        String secondBits = baseTwoRepresentation(second);

        int length = firstBits.length();

        char[] mixed = new char[length * 2];
        for (int i = 0; i < length; i++) {
            mixed[i * 2] = firstBits.charAt(i);
            mixed[i * 2 + 1] = secondBits.charAt(i);
        }

        System.out.println(new String(mixed));
    }

    private static String baseTwoRepresentation(int num) {
        StringBuilder sb = new StringBuilder();
        while(num > 0) {
            sb.append(num % 2);
            num /= 2;
        }
        return sb.reverse().toString();
    }

}


这是在转换过程中进行混合的版本

class Base2Mix2 {
    public static void main(String[] args) {
        int first = 10;
        int second = 15;

        String mixedBits = mixedBits(first, second);
        System.out.println(mixedBits);
    }

    private static String mixedBits(int first, int second) {
        StringBuilder stringBuilder = new StringBuilder();

        while(first > 0 && second > 0) {
            stringBuilder
                    .append(second % 2)
                    .append(first % 2);

            first /= 2;
            second /= 2;
        }

        return stringBuilder.reverse().toString();
    }
}

10-05 21:11
查看更多