Для фона я пытаюсь вычислить контрольную сумму для IP-пакета, который хранится в постоянной памяти (не могу изменить его на месте). Прежде чем делать контрольную сумму, я должен притвориться, что существующая контрольная сумма в пакете равна 0. Вместо того, чтобы копировать все данные во временный буфер и сохранять 0, я хотел бы сделать контрольную сумму всего пакета, а затем вычесть существующая контрольная сумма из результата.
Для этого я искал версию вычитания с дополнением до единицы, которую нашел здесь. К сожалению, если я использую это и вычитаю 0 из 0, я получаю 0x1111 вместо ожидаемого 0:
- Преобразовать 0 в дополнение до единицы: [1111]
- Далее добавляем 0: [1111]
- нет бита переполнения, так что мы закончили...
Я бы ожидал, что 0 - 0 будет 0 - что мне не хватает?