int v1 = -1;
int v2 = -2;
bool r = unsigned(v1) > unsigned(v2)
assert(r)
— UB, unspecified, impl. def. или все таки корректно?
По идее приведение signed->unsigned вполне определено,
и порядок будет сохраняться и для signed<0...
Здравствуйте, Patalog, Вы писали:
P>- UB, unspecified, impl. def. или все таки корректно?
Да, преобразование между signed и unsigned типами выводящее за диапазон чисел представимых одоими типами -- UB
Стандарт С++, кстати, допускает целых три способа бинароного представления отрицательных целых чисел...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
[]
E>Да, преобразование между signed и unsigned типами выводящее за диапазон чисел представимых одоими типами -- UB
Речь идет только о signed->unsigned, без обратного преобразования.
Где сказано про диапазон для unsigned?
В 4.7.2 сказано что результат конгруентен исходному (по модулю 2^n).
Про диапазон сказано в 4.7.3 — для unsigned->signed. Мне оно не нужно.
E>Стандарт С++, кстати, допускает целых три способа бинароного представления отрицательных целых чисел...
Это будет иметь значение для сохранения порядка?
В том же 4.7.2 ничего не говориться о том, что результат signed->unsigned зависит от предсавления.
Есть только пометка, что если у нас доп. код, то до кучи сохраняется bit pattern.
Здравствуйте, Erop, Вы писали:
P>>- UB, unspecified, impl. def. или все таки корректно? E>Да, преобразование между signed и unsigned типами выводящее за диапазон чисел представимых одоими типами -- UB
Как насчет std::string::npos, беззнакового числа, которое по стандарту равняется -1?
Здравствуйте, Roman Odaisky, Вы писали:
RO>Как насчет std::string::npos, беззнакового числа, которое по стандарту равняется -1?
Ну это такой вот стандарт Смотри ещё тут
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
P>- UB, unspecified, impl. def. или все таки корректно?
Корректно.
P>По идее приведение signed->unsigned вполне определено, P>и порядок будет сохраняться и для signed<0...
Порядок будет сохранятся на интервалах [INT_MIN,-1] и [0,INT_MAX], однако при конверсии они поменяются местами -- образ первого интервала будет больше, чем образ второго.
Здравствуйте, Erop, Вы писали:
RO>>Как насчет std::string::npos, беззнакового числа, которое по стандарту равняется -1? E>Ну это такой вот стандарт :) Смотри ещё тут
Здравствуйте, Roman Odaisky, Вы писали:
RO>Это я к тому, что в стандарте это-таки определено (желающие могут поискать, где именно). Например, 1 + unsigned(-1) = 0.
Да, в самом деле определено. Я как-то невнимательно отнёсся к исходному вопросу
Прошу прощения.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском