Re[2]: signed/unsigned comparison
От: Шахтер Интернет  
Дата: 06.08.04 18:13
Оценка: 5 (1)
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, Nikita G, Вы писали:


NG>>Объясните каким правилом разруливается ситуация сравнения знаковых/беззнаковых целых в следующем примере:


АТ>Сравнения знакового и беззнакового делается как беззнаковое. Т.е. знаковое значение приводится к беззнаковому типу.


NG>> int i = -1;

NG>> unsigned int ui = 10;

NG>> if (i < ui)

NG>> {
NG>> std::cout << "WOW" << std::endl;
NG>> }
NG>> else
NG>> {
NG>> std::cout << "BAD" << std::endl;
NG>> }

NG>>На VC6 SP4 сравнение в данном примере всегда беззнаковое, и результат сравнения всегда false


АТ>Разумеется, false. '-1' после приведения к 'unsigned int' в VC6 — это 4294967295, что больше, чем 10.


А если вспомнить, что стандарт явно определяет способ такой конверсии как приведение по модулю, то на любой "стандартной" платформе должно получится максимальное значение, представимое в unsigned int, соответсвенно, всегда будет false.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.