сравнение между подписанным номером и неподписанным номером - PullRequest
0 голосов
/ 22 октября 2018

В учебнике есть таблица сравнения не подписанных и подписанных чисел

enter image description here

В нем говорится, что * будет отмечен при оценке, когдалюбой операнд сравнения не подписан, другой операнд неявно приведен к беззнаковому.

2147483647 - номер со знаком, а (int) 2147483648U - также номер со знаком, поэтому тип также подписан, но почему в оценке есть знак *?Я думаю, что не было неявного приведения между 2147483647 и (int) 2147483648U?что с ними происходит?

Редактировать: Я думаю, что в книге есть некоторые ошибки.Извините за путаницу

1 Ответ

0 голосов
/ 22 октября 2018

Если предположить, что 2147483647 может быть представлен int в системе (и он представлен в типичных системах с шириной 32 бита), то этот литерал имеет тип int.

(int)some_valueвсегда является целым числом из-за явного преобразования.

Поэтому 2147483647 > (int)2147483648U не включает неявных преобразований - существует только явное преобразование.

Я думаю, что между 2147483647 не было неявного приведения.и (int) 2147483648U?

Вы думаете правильно.

но почему в оценке есть * оценка?

Я думаю, что можетбыть ошибкой в ​​книге.

что с ними происходит?

Если 2147483648 не представлен int в системе (и не включенв типичных системах, где его ширина составляет 32 бита), результирующее значение явного преобразования определяется реализацией, и поэтому стандарт C ++ технически не гарантирует результат сравнения.

Однако во всех форматах представления знакаНасколько мне известно, все неподписанные значения (одинаковой ширины), которые не представлены в подписанном представлении, имеют то же представление, что и некоторое отрицательное значение, поэтому на практике сравнение будет true, несмотря на отсутствие гарантий от стандарта.


Во-вторых, (без знака) -1 не подписано, а -2 подписано.Следовательно, существует неявное приведение к неподписанному ...

Правильно.

... но в оценке нет отметки *.Что не так?

Насколько я могу судить, это еще одна ошибка в книге.Возможно, они потеряли звездочку.

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