Прибавление или вычитание произвольного числа n соответствует n единичным шагам вдоль кольца от исходного числа в нужном направлении.
Так, в 8-разрядном беззнаковом типе:
254 + 4 = 2,
200 — 255 = 201,
200 — 255 = 201,
а в 16-разрядном знаковом типе:
32760 + 10 = -32766,
-32760 — 10 = 32766.
-32760 — 10 = 32766.
Это можно проверить, выполняя действия сложения в двоичной k-разрядной арифметике.
Вычитание можно заменить на сложение с отрицательным числом, представляя последнее как дополнение его модуля до 2k вне зависимости от наличия знакового бита у типа (у беззнаковых типов дополнительный код для отрицательных чисел, по модулю превосходящих 2k-1, будет иметь 0 в самом левом бите, что для знаковых типов недопустимо). Так, в 8-разрядном беззнаковом типе для приведенных примеров мы получим следующее:
256
|
11111110
|
+ 4
|
+ 00000100
|
= 254 + 4
|
= 1100000010
|
Результат:
|
00000010 = 2
|