Есть два целых числа без знака (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);
Но я думаю, что есть другой способ, что-то связанное с дополнением 2s?, и в этой встроенной системе x и y являются самыми большими типами unsigned int, поэтому добавление 0xff... невозможно
Как лучше всего написать заявление (целевой язык C)?
unsigned, но это не переносимо. Мусор на входе, мусор на выходе. - person Alok Singhal   schedule 14.01.2010x, этотxникуда не перенесется, пока вы не начнете его каким-то образом изменять. Если вы модифицируете его, покажите нам, как. В настоящее время нет никакого способа осмысленно выяснить, о чем вы говорите. - person AnT   schedule 14.01.2010