Стандарт C не передбачає конкретного способу представлення негативних підписаних номерів.
У більшості реалізацій, з якими ви, швидше за все, зіткнетеся, цілі числа з підписаними знаками зберігаються у тому, що називається доповненням двох . Інший головний спосіб зберігання негативних підписаних номерів називається доповненням .
Доповнення двох з N-бітового числа x
визначається як 2^N - x
. Наприклад, 8-бітним доповненням двох 1
є 2^8 - 1
, або 1111 1111
. 8-бітовим доповненням двох 8
є 2^8 - 8
, що в двійковому є 1111 1000
. Це також можна обчислити, перегортаючи біти x
та додаючи один. Наприклад:
1 = 0000 0001
~1 = 1111 1110
~1 + 1 = 1111 1111
-1 = 1111 1111
21 = 0001 0101
~21 = 1110 1010
~21 + 1 = 1110 1011
-21 = 1110 1011
Доповнення N-бітового числа x визначається як x з усіма його бітами в основному.
1 = 0000 0001
-1 = 1111 1110
21 = 0001 0101
-21 = 1110 1010
Доповнення двох мають ряд переваг перед доповненням одного. Наприклад, у нього відсутнє поняття «негативний нуль», яке з поважних причин бентежить для багатьох людей. Додавання, множення і віднімання працюють однаково з підписаними цілими числами, реалізованими з двома доповненими, як і з непідписаними цілими числами.