Когда был найден комплимент 0, оказалось, что -1. Почему дополнение 0 равно -1? Это всегда -1 или зависит от компилятора?
Дополнение нулями ANSI C89
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
... но ни один компилятор, используемый сегодня, на самом деле этого не делает. :)
- person John Zwinck; 16.01.2014
@John Есть еще устаревшие системы, которые используют дополнение, но они становятся все более и более редкими. Я обычно предполагаю дополнение до двух, когда кодирую C. Использование конструкций более новых, чем C89, вероятно, приводит к большему снижению переносимости, чем предположение о дополнении до двух.
- person Klas Lindbäck; 16.01.2014