В c ~ есть оператор дополнения до 1. Это эквивалентно: ~a = -b + 1 Таким образом, a - ~b -1 = a-(-b + 1) + 1 = a + b - 1 + 1 = a + b
Кто-нибудь может мне это объяснить?
В c ~ есть оператор дополнения до 1. Это эквивалентно: ~a = -b + 1 Таким образом, a - ~b -1 = a-(-b + 1) + 1 = a + b - 1 + 1 = a + b
Кто-нибудь может мне это объяснить?
Из начальной школы математики мы знаем
a = -(-a);
Из дополнения до двух мы знаем, что
-a = (~a) + 1 (invert and add one)
так что мы знаем, что
a + b
= a - (-b) elementary math
= a - (~b + 1) twos complement
= a - (~b) - 1 distribute the negative (elementary math)
Вы правы, что ~
всегда является дополнением до 1 (иначе побитовым) в c. Где вы ошибаетесь, так это в том, что C не гарантирует дополнение 2 для чисел. Таким образом, все ваши расчеты зависят от использования основной разновидности C.
a - ~b -1 = a-(-b + 1) + 1
допустимо (и равноa + b
), но на самом деле это не имеет смысла как шаг. Похоже, что он подставляет~b = -b + 1
(что неверно) и как бы случайно исправляет это, заменяя вычитание в конце на сложение. Очень странно. - person harold   schedule 29.03.2014