Если предположить, что 2147483647
может быть представлен int
в системе (и он представлен в типичных системах с шириной 32 бита), то этот литерал имеет тип int
.
(int)some_value
всегда является целым числом из-за явного преобразования.
Поэтому 2147483647 > (int)2147483648U
не включает неявных преобразований - существует только явное преобразование.
Я думаю, что между 2147483647 не было неявного приведения.и (int) 2147483648U?
Вы думаете правильно.
но почему в оценке есть * оценка?
Я думаю, что можетбыть ошибкой в книге.
что с ними происходит?
Если 2147483648
не представлен int
в системе (и не включенв типичных системах, где его ширина составляет 32 бита), результирующее значение явного преобразования определяется реализацией, и поэтому стандарт C ++ технически не гарантирует результат сравнения.
Однако во всех форматах представления знакаНасколько мне известно, все неподписанные значения (одинаковой ширины), которые не представлены в подписанном представлении, имеют то же представление, что и некоторое отрицательное значение, поэтому на практике сравнение будет true
, несмотря на отсутствие гарантий от стандарта.
Во-вторых, (без знака) -1 не подписано, а -2 подписано.Следовательно, существует неявное приведение к неподписанному ...
Правильно.
... но в оценке нет отметки *.Что не так?
Насколько я могу судить, это еще одна ошибка в книге.Возможно, они потеряли звездочку.