Выполним вычитание в двоичной системе:
100111
- 10101
-------
Начнем вычитать справа налево:
Продолжаем вычитание:
0 1 (10) 0 1 1
- 0 0 1 0 1 0 1
---------
0 1 0 1 0 0
Итак:
Результат: 10100.
Проверим в десятичной системе:
Ошибка в моих расчетах. Попробую еще раз.
1 0 0 1 1 1_2
- 1 0 1 0 1_2
Вычитаем столбиком:
1 0 0 1 1 1
- 0 1 0 1 0 1
----------
0 1 0 1 0 0
1 - 1 = 0
1 - 0 = 1
1 - 1 = 0
0 - 0 = 0
0 - 1. Занимаем у старшей единицы: 10 (двоичное) = 2 (десятичное). 10 - 1 = 1. Старшая единица стала 0.
0 - 0 = 0.
Результат: 010100, что равно 10100.
Проверка в десятичной системе:
Ошибка сохраняется. Попробуем так:
1001112 = 1 * 25 + 0 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 1 * 20 = 32 + 0 + 0 + 4 + 2 + 1 = 39
101012 = 1 * 24 + 0 * 23 + 1 * 22 + 0 * 21 + 1 * 20 = 16 + 0 + 4 + 0 + 1 = 21
39 - 21 = 18
Теперь переведем 18 в двоичную систему:
18 / 2 = 9 ост. 0
9 / 2 = 4 ост. 1
4 / 2 = 2 ост. 0
2 / 2 = 1 ост. 0
1 / 2 = 0 ост. 1
Читаем снизу вверх: 100102.
Проверим еще раз вычитание в столбик, занимая правильно:
1 0 0 1 1 1
- 1 0 1 0 1
-----------
0 1 0 1 0 0
1 - 1 = 0
1 - 0 = 1
1 - 1 = 0
0 - 0 = 0
0 - 1: Занимаем у единицы слева. Она становится 0, а эта 0 становится 10 (2). 10 - 1 = 1.
0 (бывшая 1, у которой заняли) - 0 = 0.
Получаем 010100, или 101002. Это 20 в десятичной. Моя десятичная проверка дает 18.
Где ошибка?
100111 = 32 + 4 + 2 + 1 = 39
10101 = 16 + 4 + 1 = 21
39 - 21 = 18
18 в двоичной = 100102.
Снова вычитаем в столбик:
1 0 0 1 1 1
- 1 0 1 0 1
------------
1 0 0 1 1 1
0 1 0 1 0 1 (подписываем второй множитель с выравниванием по правому краю)
-----------
0 1 0 1 0 0 (мой результат, который дает 20)
Попробуем правильное занимание:
1 0 0 1 1 1
- 1 0 1 0 1
-----------
(1) (1) (1)
1 0 0 1 1 1
- 0 1 0 1 0 1
-----------
0 1 0 1 0 0
1 - 1 = 0
1 - 0 = 1
1 - 1 = 0
0 - 0 = 0
0 - 1 = ? Занимаем у 1. Становится 0. А эта 0 становится 10. 10 - 1 = 1.
0 (оставшаяся от 1) - 0 = 0.
Все равно 10100.
Проверим еще раз десятичную систему:
100111_2 = 32 + 4 + 2 + 1 = 39
10101_2 = 16 + 4 + 1 = 21
39 - 21 = 18
18 в двоичной: 16 + 2 = 100102.
Вижу свою ошибку при записи вычитания.
1 0 0 1 1 1
- 1 0 1 0 1
------------
1 0 0 1 1 1
- 0 1 0 1 0 1
-------------
0 1 0 1 0 0
Десятичная проверка: 39 - 21 = 18.
Двоичная: 18 = 16 + 2 = 100102.
Нужно получить 10010.
1 0 0 1 1 1
- 0 1 0 1 0 1
------------
(1) (1) (1)
1 0 0 1 1 1
- 0 1 0 1 0 1
--------------
0 1 0 1 0 0
1-1=0
1-0=1
1-1=0
0-0=0
0-1: Занимаем у 1. Становится 0. Эта 0 становится 10. 10-1 = 1.
0 (оставшаяся от 1) - 0 = 0.
В итоге 010100 = 101002 = 20. Истина где-то рядом.
Попробую еще раз правильно занять:
1 0 0 1 1 1
- 1 0 1 0 1
-----------
1 0 0 1 1 1
0 1 0 1 0 1
----------
(1) (1) (1) <-- заняли
1 0 0 1 1 1
- 0 1 0 1 0 1
--------------
0 1 0 1 0 0
1-1=0
1-0=1
1-1=0
0-0=0
0-1: Занимаем у 1. Становится 0. А эта 0 становится 10. 10-1=1.
0-0=0.
Опять 10100.
Десятичная проверка: 39 - 21 = 18. 18 = 100102.
Ага, я понял, где ошибка. Она в понимании двоичного вычитания.
1 0 0 1 1 1
- 0 1 0 1 0 1
------------
^ ^ ^ (места, где нужно занимать)
1 - 1 = 0
1 - 0 = 1
1 - 1 = 0
0 - 0 = 0
0 - 1: Занимаем у '0' слева. Там нет, значит занимаем у '1'.
0 (10) 0 1 1 1
- 0 1 0 1 0 1
-------------
0 1 0 1 0 0
Теперь у '10' (2) занимаем для следующей позиции.
0 1 (10) 1 1 1
- 0 1 0 1 0 1
-------------
0 1 0 1 0 0
10 - 1 = 1
1 (оставшаяся от 10) - 0 = 1
0 (оставшаяся от 1) - 0 = 0.
Получаем 010100 = 10100. Опять 20.
Пробую так:
1001112 = 39
101012 = 21
39 - 21 = 18
18 = 100102.
1 0 0 1 1 1
- 0 1 0 1 0 1
------------
0 1 0 1 1 0
1 - 1 = 0
1 - 0 = 1
1 - 1 = 0
0 - 0 = 0
0 - 1. Занимаем у 1. 10 - 1 = 1. Оставшаяся 1 становится 0.
0 - 0 = 0.
100102. Ура!