Существует два unsigned ints (x и y), которые необходимо вычесть. x всегда больше y. Однако оба x и y могут обернуться вокруг; например, если они оба являются байтами, после 0xff приходит 0x00. Дело в том, что x обертывается, а y - нет. Теперь x оказывается меньше y. К счастью, x не будет обертываться дважды (только один раз гарантирован). Предполагая байты, x обернул и теперь равен 0x2, тогда как y не имеет и равен 0xFE. Правильный ответ x-y должен быть 0x4.
Возможно,
( x > y) ? (x-y) : (x+0xff-y);
Но я думаю, что есть другой способ, что-то с участием 2-х комплиментов?, и в этой встроенной системе x и y являются самыми большими неподписанными типами int, поэтому добавление 0xff... невозможно
Каков наилучший способ написать инструкцию (целевой язык - C)?