Сообщение от Kepa
|
Нет, вполне разобрался - суть в том что у нас нет отрицательного нуля, поэтому при поразрядном отрицании мы получаем отрицательное число, модуль которого на 1 больше изначального, и чтобы его привести к соответствию мы добавляем единицу. Просто чтобы "привыкнуть" к этому надо немного времени и практики (:
|
нет, суть в том, что мы заменяем вычитание сложением. Например, рассматриваем 4-битные числа. 16 - это по сути ноль (10000b)
заменяем вычитание сложением: a - b = a + 16-b (16-b - дополнение до двойки)
почему же это все-таки работает или что-то типа алгебраического смысла? a + 16-b = 16 + a-b. Т.е. мы к нулю (16) прибавляем положительное (a>b) либо отрицательное (a<b) число и оставляем четыре младших бита результата. А все значения, которые принимает число - зациклены (посмотри на
таблицу, вверх - сложение, вниз - вычитание)
а то, что есть альтернативный способ получения дополнения до двойки - это уже другой вопрос. Он делается через дополнение до единиц, а там в качестве точки отсчета выбрано на единицу меньше число. Поэтому сначала дополняем до единиц, а потом прибавляем еще одну единицу
Kolyaj, но мы же не про IEEE 754 разговариваем