Дополнение нулями ANSI C89

Когда был найден комплимент 0, оказалось, что -1. Почему дополнение 0 равно -1? Это всегда -1 или зависит от компилятора?


person user3202188    schedule 16.01.2014    source источник
comment
Что вы имеете в виду под дополнением или комплиментом здесь? Вы имеете в виду побитовое отрицание?   -  person John Zwinck    schedule 16.01.2014
comment
Это означает работу оператора ~   -  person user3202188    schedule 16.01.2014
comment
Так что да, побитовое отрицание.   -  person John Zwinck    schedule 16.01.2014


Ответы (2)


Побитовое отрицание 0, записанное в C как ~0, равно -1, только если компилятор использует дополнение до двух для представления целых чисел со знаком. Таким образом, это результат того, как компилятор представляет числа, и обычно это не так.

person unwind    schedule 16.01.2014

Это -1 в дополнении до двух. Компилятор может выбирать другие представления.

person Klas Lindbäck    schedule 16.01.2014
comment
... но ни один компилятор, используемый сегодня, на самом деле этого не делает. :) - person John Zwinck; 16.01.2014
comment
@John Есть еще устаревшие системы, которые используют дополнение, но они становятся все более и более редкими. Я обычно предполагаю дополнение до двух, когда кодирую C. Использование конструкций более новых, чем C89, вероятно, приводит к большему снижению переносимости, чем предположение о дополнении до двух. - person Klas Lindbäck; 16.01.2014