signed->unsigned & relation ops.
От: Patalog Россия  
Дата: 21.09.07 13:16
Оценка:
Всем привет!

C точки зрения языка
int v1 = -1;
int v2 = -2;
bool r = unsigned(v1) > unsigned(v2)
assert(r)

— UB, unspecified, impl. def. или все таки корректно?
По идее приведение signed->unsigned вполне определено,
и порядок будет сохраняться и для signed<0...
Почетный кавалер ордена Совка.
Re: signed->unsigned & relation ops.
От: Erop Россия  
Дата: 21.09.07 13:24
Оценка: -2
Здравствуйте, Patalog, Вы писали:

P>- UB, unspecified, impl. def. или все таки корректно?

Да, преобразование между signed и unsigned типами выводящее за диапазон чисел представимых одоими типами -- UB

Стандарт С++, кстати, допускает целых три способа бинароного представления отрицательных целых чисел...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: signed->unsigned & relation ops.
От: Patalog Россия  
Дата: 21.09.07 13:35
Оценка:
Здравствуйте, Erop, Вы писали:

[]

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.
Почетный кавалер ордена Совка.
Re[2]: signed->unsigned & relation ops.
От: Roman Odaisky Украина  
Дата: 21.09.07 17:11
Оценка:
Здравствуйте, Erop, Вы писали:

P>>- UB, unspecified, impl. def. или все таки корректно?

E>Да, преобразование между signed и unsigned типами выводящее за диапазон чисел представимых одоими типами -- UB

Как насчет std::string::npos, беззнакового числа, которое по стандарту равняется -1?
До последнего не верил в пирамиду Лебедева.
Re[3]: signed->unsigned & relation ops.
От: Erop Россия  
Дата: 21.09.07 17:46
Оценка: :)
Здравствуйте, Roman Odaisky, Вы писали:

RO>Как насчет std::string::npos, беззнакового числа, которое по стандарту равняется -1?

Ну это такой вот стандарт Смотри ещё тут
Автор: Sheridan
Дата: 12.09.07
про стандарты
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: signed->unsigned & relation ops.
От: Шахтер Интернет  
Дата: 21.09.07 23:51
Оценка: 4 (1)
Здравствуйте, Patalog, Вы писали:

P>Всем привет!


P>C точки зрения языка

P>
P>int v1 = -1;
P>int v2 = -2;
P>bool r = unsigned(v1) > unsigned(v2)
P>assert(r)
P>

P>- UB, unspecified, impl. def. или все таки корректно?

Корректно.

P>По идее приведение signed->unsigned вполне определено,

P>и порядок будет сохраняться и для signed<0...

Порядок будет сохранятся на интервалах [INT_MIN,-1] и [0,INT_MAX], однако при конверсии они поменяются местами -- образ первого интервала будет больше, чем образ второго.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[4]: signed->unsigned & relation ops.
От: Roman Odaisky Украина  
Дата: 24.09.07 17:17
Оценка:
Здравствуйте, Erop, Вы писали:

RO>>Как насчет std::string::npos, беззнакового числа, которое по стандарту равняется -1?

E>Ну это такой вот стандарт :) Смотри ещё тут
Автор: Sheridan
Дата: 12.09.07
про стандарты :)


Это я к тому, что в стандарте это-таки определено (желающие могут поискать, где именно). Например, 1 + unsigned(-1) = 0.
До последнего не верил в пирамиду Лебедева.
Re[5]: signed->unsigned & relation ops.
От: Erop Россия  
Дата: 24.09.07 21:05
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Это я к тому, что в стандарте это-таки определено (желающие могут поискать, где именно). Например, 1 + unsigned(-1) = 0.


Да, в самом деле определено. Я как-то невнимательно отнёсся к исходному вопросу
Прошу прощения.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.