Попробуйте это:
import java.util.Scanner;
public class Converter {
public static void main(String[] args) {
final Scanner input = new Scanner(System.in);
System.out.println("What is the number in the decimal system that you want to convert to binary?");
int dec = input.nextInt();
int div = 128;
while (div > 0) {
System.out.print(dec / div);
dec = dec % div;
div >>= 1; // equivalent to div /= 2
}
System.out.println();
}
}
Теперь давайте пройдемся по коду и попытаемся понять, что происходит.Я предполагаю, что максимальный размер составляет 8 бит, поэтому переменная div
установлена в 2 n-1 , где n = 1. Если вам нужно 16 бит, div
будет 32768.
Программа запускается с этого значения и пытается делить целое число делением указанного числа делителем.И хорошо то, что он даст 1, если число больше или равно делителю, и 0 в противном случае.
Итак, если число, которое мы пытаемся преобразовать, равно 42, то делениеэто на 128 дает 0, поэтому мы знаем, что первая цифра нашего двоичного числа равна 0.
После этого мы устанавливаем число равным остаток целочисленного деления, и мыразделите делитель на два.Я делаю это с небольшим сдвигом вправо (div >>= 1
), но вы также можете использовать присваивание-делитель (div /= 2
).
К настоящему моменту делитель равен 64, а число по-прежнему42. Если мы сделаем операцию снова, мы снова получим 0.
На третьей итерации мы делим 42 на 32, и это дает 1. Таким образом, наши двоичные цифры до сих пор равны 001
.Мы устанавливаем число, являющееся остатком от деления, которое равно 10.
Продолжая это, мы получаем двоичное число 00101010
.Цикл заканчивается, когда делитель div
равен нулю и нечего делить.
Постарайтесь шаг за шагом понять, как работает программа.Это просто, но может быть очень сложно придумать простое решение.В данном случае это прикладная математика и знание того, как работает целочисленная математика в Java.Это приходит с опытом, который вы получите в свое время.