Компиляторы и представления отрицательных чисел - PullRequest
5 голосов
/ 01 апреля 2009

Недавно меня смутил этот вопрос . Возможно, потому что я не читал языковые спецификации (это моя вина, я знаю).

Стандарт C99 не указывает, какое представление отрицательных чисел должно использоваться компилятором. Я всегда думал, что единственный правильный способ хранить отрицательные числа - это дополнение к двум (в большинстве случаев).

Итак, вот мой вопрос: знаете ли вы какой-нибудь современный компилятор, который по умолчанию реализует представление дополнения или знака? Можем ли мы изменить представление по умолчанию с помощью некоторого флага компилятора?

Какой самый простой способ определить, какое представление используется?

А что насчет стандарта C ++?

Ответы [ 3 ]

5 голосов
/ 01 апреля 2009

Я думаю, что вопрос не столько в том, какое представление использует компилятор, а в том, какое представление использует базовая машина. Компилятор будет очень глупо выбирать представление, не поддерживаемое целевой машиной, так как это приведет к дополнительным нагрузкам без пользы.

Некоторые поля контрольной суммы в наборе IP-протоколов используют свое дополнение, поэтому, возможно, выделенный ЦП типа «сетевой ускоритель» реализует его.

1 голос
/ 14 мая 2015

Серия UNISYS 2200 , в которой реализована дополнительная математика, все еще используется. Вы можете прочитать больше об этом в вопросах ниже

Экзотические архитектуры, о которых заботятся комитеты по стандартам

Существуют ли реализации языка C, не дополняющие двойку?

1 голос
/ 01 апреля 2009

Хотя представление twos-дополнение является наиболее распространенным, оно не единственное ( см. Некоторые ). Комитеты по стандартизации C и C ++ не хотели требовать, чтобы машины, не являющиеся комплементарными, имитировали не нативное представление. Поэтому ни C, ни C ++ не требуют определенного отрицательного целочисленного формата.

Это приводит к неопределенному поведению побитовых операций со знаковыми типами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...