Спорим, что вы не знаете, как правильно выполнять вычитание в двоичной системе отсчёта?
Это facepalm, но сколько бы я не посмотрел видео на ютубе, то в каждом неверно объясняется вычитание двоичных чисел.
ДополненРешил посмотреть, как устроено вычитание в компьютере на основе логических вентелей, но понял, что эта тема для меня не совсем понятна, хотя много раз сталкивался с отрицательными числами в программировании. Когда решил освежить память, то был удивлен, насколько во всех видео на ютубе неверно объясняется вычитание двоичных чисел.
Точнее они объясняют так, что человек не понимает, почему именно так и ему просто приходится принять это как есть. Через некоторое время конечно же этот человек просто тупо забудет то, что он увидел на видео.
Вычитание в стандартном двоичном дополнительном коде элементарно:
1. Меняешь знак вычитаемого.
2. Складываешь уменьшаемое и вычитаемое.
Чтобы изменить знак числа в дополнительном коде, надо инвертировать все биты числа и к получившемуся числу прибавить 1.
В действительности, всё ещё проще: разница между сложением и вычитанием в двоичном коде - только в переносе. При сложении перенос появляется при 1 + 1 и работает как ещё одно слагаемое, а при вычитании - при 0 - 1 и работает как ещё одно вычитаемое.
Так что аппаратно схемы двоичных сложения и вычитания очень похожи.
Правила арифметических операций в десятичной, двоичной и других позиционных традиционных системах одинаковые, просто делается поправка на старшую цифру.
Вас же не смущает, что в десятичной системе 100 - 1 = 99, и Вы уверенно применяете правила распространения заемов и переносов при вычислениях в десятичной системе?
Аналогично в двоичной 100 - 1 = 11, просто старшая цифра тут 1, а не 9.
не легче в десятичную перевести и уже в десятичной проводить вычисления?