Вы знаете слова из песни The Jackson 5, «ABC»? Я собираюсь показать вам, что дополнение двух почти так же просто, как… 1, 2, 3.
Когда мы были маленькими, мы научились считать в десятичной системе счисления (основание 10), начиная с 0.
0 1 2 3 4 5 6 7 8 9 10 11 12 .. .. 99 100 101
Что произойдет, когда мы дойдем до числа 10? Самая правая цифра переходит в 0, и мы добавляем 1 слева, чтобы начать разряды десятков.
Каждая цифра слева увеличивается на другую степень.
Сотые места + Десятки + Единичные места
10² + 10¹ + 10⁰
Проиллюстрируем числом 108:
(10² * 1) + (10¹ * 0) + (10⁰ * 8) = 108
Теперь поговорим о двоичном.
Ваш компьютер хранит все в виде последовательности нулей и единиц, включая числа, и работает в двоичном формате (с основанием 2).
… + 2⁶ + 2⁵ + 2⁴ + 2³ + 2² + 2¹ + 2⁰
Вы видите, что показатель степени увеличивается на 1 каждый раз слева?
Число 108 в базе 10 выглядело бы иначе в базе 2.
(2⁶ * 1) +(2⁵ * 1) + (2⁴ * 0) + (2³ * 1) + (2² * 1) + (2¹ * 0) + (2⁰ * 0) = 1101100
Base 10: 108 Base 2: 1101100
Хорошо, теперь ты попробуй! Выберите число, любое число и сделайте то же самое.
Так что такое дополнение до двух?
Дополнение до двух указывает на то, как числа хранятся в памяти. Самая маленькая память - это немного. И каждый бит может быть 0 для «выключено» или 1 для «включено».
Чтобы увидеть, как компьютер хранит положительное число, запишите его в двоичном формате. Возьмем для примера число 28 (основание 10).
Чтобы записать это в двоичном формате, я использую этот метод:
- Найдите наибольшее число, не превышающее моего числа.
2⁵ + 2⁴ + 2³ + 2² + 2¹ + 2⁰
2⁵ равно 32, а это больше 28, поэтому давайте попробуем следующее наименьшее число справа.
2⁴ равно 16, и оно не превышает 28. Тогда это моя отправная точка, и я отмечу 1 под ней, чтобы указать, что бит включен.
2⁴
1
2. Вычислите, какие значения от битов вправо при сложении с 2⁴ будут равны 28. Я, по сути, выясняю, какие биты включить, а какие оставить. Когда я закончу, у меня будет двоичное число.
2⁴ + 2³ + 2² + 2¹ + 2⁰
1….. 1…..1…..0…..0
(2⁴ * 1) + (2³ * 1) + (2² * 1) + (2¹ * 0) + (2⁰ * 0)
Base 10: 28 Base 2 (binary): 11100
Это сравнимо с внесением изменений в кого-то…
Представьте, что вы продаете что-то за 27 центов. Покупатели дают вам купюру в 1 доллар.
У вас есть выбор вернуть сдачу в четвертях, десятицентовиках, пятаках и пенни. Вы можете вернуть сдачу всеми пенни (73 цента), но это будет проблемой и, скорее всего, расстроит покупателей. Итак, давайте вернем сдачу, начиная с самой крупной монеты. Чтобы равняться сдаче в 73 цента, вы даете им:
2 четверти, 2 центов, 0 никель и 3 пенни.
Вы видели, как хранятся положительные числа, а как насчет отрицательных чисел?
Чтобы найти два дополнения, переверните все биты и добавьте 1.
Итак, давайте возьмем то же число 28 в базе 10 и преобразуем его в двоичную форму:
00011100
Теперь переворачиваем биты:
11100011
И добавляем 1:
11100100
Base 10: 28 28 in binary form: 00011100 Base 10: -28 -28 in binary form: 11100100
Теперь вы знаете, как положительные и отрицательные числа хранятся в памяти. Это почти так же просто, как A, B, C…. 1, 2, 3….