Есть две основные проблемы, на которые нужно обратить внимание:
- Не объявляйте метод внутри другого метода.
- Ваш цикл никогда не закончится.
Во-первых, люди уже указали, как написать этот метод.Обратите внимание, что обычные имена методов в java обычно пишутся с маленькой буквы в нижнем регистре.
Во-вторых, вы никогда не измените значение int1
, поэтому вы в конечном итоге напечатаете младший бит вводав тесной петле.Попробуйте что-то вроде:
do {
System.out.println(int1 & 1);
int1 = int1 >> 1;
} while (int1 > 0);
Объяснение:
- int1 & 1: это двоичный файл и.Он «выбирает» наименьший бит (LSB), то есть (a & 1) равен единице для нечетных чисел, ноль для четных чисел.
- int1 >> 1: это правильный сдвиг.Он перемещает все биты вниз на один слот (>> 3 - на 3 слота).LSB (бит 0) отбрасывается, бит 1 становится LSB, бит 2 становится битом и т. Д. (A >> 0) вообще ничего не делает, оставляет нетронутым.
Тогда вы заметите, что вы печатаете цифры в «неправильном порядке» - более естественно, чтобы они печатались из MSB в LSB.Вы выводите в обратном порядке.Чтобы исправить это, вам, вероятно, будет лучше с циклом for
, проверяющим каждый бит от MSB до LSB.
Идея для цикла for состоит в том, чтобы взглянуть на каждый из 32 бит вint, начиная с MSB, чтобы они печатались слева направо.Примерно так
for (i=31; i>=0; i--) {
if (int1 & (1<<i)) {
// i-th bit is set
System.out.print("1");
} else {
// i-th bit is clear
System.out.print("0");
}
}
1<<i
- это сдвиг влево.Аналогично правому сдвигу, но в другом направлении.(Я вообще не проверял это.)
Как только вы заставите это работать, я предлагаю в качестве дополнительного упражнения, чтобы вы попытались сделать то же самое, но не распечатывали начальные нули.