Распечатать MSB и LSB введенного пользователем int - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать программу, которая будет печатать первое и последнее двоичное значение пользователя, заданного int, используя побитовые операторы. Например, если пользователь вводит 5, вывод должен быть «Двоичное значение равно 0101. MSB равно 0, LSB равно 1». Это то, что я имею до сих пор, и это похоже на работу, но я чувствую, что это неправильно. Кроме того, JAVA, кажется, не добавляет 0 перед меньшими числами. Например, выходные данные 5 - это не 0101, а 101, что меняет (по крайней мере для пользователя), чем являются MSB и LSB. Любая помощь будет принята с благодарностью, и я новичок в ней, поэтому, если бы вы могли сделать ее относительно простой, это было бы здорово.


public class LSBAndMSB {
    public static void main (String [] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Hello! Please enter an integer.");
        int in = sc.nextInt();

        int first = 2;
        int MSB = MSB(in, first);
        int LSB = LSB(in, first);
        String binary = binary(in);

        System.out.print("You entered: " + in + ". The binary of this"
                + " number is: " + binary
                + ".\nThe MSB of the int " + in + " is: " + MSB +
                ".\nThe LSB of the int " + in + " is: " + LSB);


    }

    public static String binary(int out) {
        return Integer.toBinaryString(out);
    }

    public static int LSB (int out, int pos) {
            out = (out & (1 << (pos - 2)));
            return out;
    }

    public static int MSB (int out, int pos) {
        if (out > 0) {
            out = (~ out & out);
            return out;
        } else {
            out = (~ out & 0);
            return out;
        }
    }
}

1 Ответ

2 голосов
/ 02 мая 2020

Целые числа в Java являются 32-битными (-1 бит для +/-)

    int i = 1073741824;

    int MSB = i >>> 30;
    int LSB = i & 1;

    System.out.println("MSB: " + MSB + " LSB: " + LSB);

Обратите внимание, что любое число меньше 1073741824 вернет 0 как MSB

Если Вы хотите другие размеры:

8 bit  -> i >>> 7
16 bit -> i >>> 15
24 bit -> i >>> 23
32 bit -> i >>> 30 (this is actually 31 bit, max size for Integers in Java)
...