В двоичной системе счисления есть только две цифры: 0 и 1. Все остальные числа представлены этими двумя цифрами. Например, "один" - это 1, "два" - 10, "три" - 11, "четыре" - 100 и так далее. Чаще всего люди используют систему счисления с десятью цифрами (числа от 0 до 9). Это называется десятичной системой счисления.
Деление на два в двоичном исчислении очень просто. Это делается путем отбрасывания последней цифры справа от числа. Это называется "операция сдвига битов". Например, если мы выполним операцию сдвига битов для двоичного числа 100, то получим 10. Поскольку двоичное число 100 - это десятичная 4, а двоичное число 10 - десятичная 2, это вполне логично.
Другой пример - выполнение операции сдвига битов на 1101. В результате у нас останется 110, но в конце мы отбросили 1, а не ноль. Это также имеет смысл, потому что 1101 в двоичном исчислении равно 13 в десятичном. Если мы разделим 13 на 2, то получим 6 с остатком 1 (у нас осталась 1).
Компьютеры
Компьютеры используют двоичную систему счисления для хранения информации. Информация разбивается на крошечные фрагменты, называемые битами. Каждый бит - это либо 0, либо 1. Поэтому самый быстрый и простой способ для компьютера выполнить деление - это операция сдвига битов - деление на два. Замена обычного деления сдвигом битов - это способ оптимизации программы. (Оптимизация программы - это попытка сделать программу быстрее и эффективнее).
В компьютерном программировании символ >> иногда используется для обозначения операции сдвига битов. В Java мы можем попросить компьютер решить задачу 19 ÷ 2 {\displaystyle 19\div 2}
, написав 19 >> 2. Это то же самое, что написать 19/2. Обе эти версии дадут нам ответ 9. Есть проблема, когда пытаешься решить задачу типа - 4 ÷ 2 {\displaystyle -4\div 2}
. В Java, если мы напишем -3/2, компьютер скажет нам, что ответ -1. Но если мы попытаемся сделать -3 >> 2, компьютер скажет, что ответ -2. Это произойдет каждый раз, когда мы попытаемся выполнить операцию сдвига битов с одним отрицательным числом. Причина этого сложна и связана с тем, как отрицательные двоичные числа сохраняются компьютером.
Несмотря на то, что компьютеры быстрее всего выполняют деление с помощью операций сдвига битов, большинство компьютерных кодов не делают этого таким образом. Это связано с тем, что программисты хотят, чтобы их программы были переносимыми и читаемыми. Переносимость означает, что программа может быть запущена на различных компьютерах и операционных системах. Читаемость означает, что исходный код легко читается и понимается. В большинстве случаев компилятор (программа, которая преобразует исходный код в понятные компьютеру 0 и 1) автоматически изменяет деление на битовые сдвиги.