Re[4]: Int overflow (простой вопрос)
От: sevanew  
Дата: 19.12.06 07:29
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, Посторонним В., Вы писали:


ПВ>>Вместо

ПВ>>SHRT_MAX + 1 следовало читать SHRT_MAX
ПВ>>и соответственно
ПВ>>вместо INT_MAX + 1 следовало читать INT_MAX

ПВ>>голова дурная уже в час ночи

ПВ>>но как я понял от этого ничего не поменяется: все равно будет в обоих случаях будет UB

АТ>Общий итог — не поменяется. Просто все те же эффекты теперь переместятся от инициализаций к инкрементам.


АТ>В случае с 'i' мы опять получим неопределенное поведение на инкременте '++i' по тем же причинам.


АТ>В случае с 's' мы опять получаем либо неопределеное поведение (если диапазон 'short' совпадает с диапазоном 'int'), либо результат, определяемый реализацией (в противном случае). По тем же причинам.


АТ>Т.е. конкретного ответа в общем случае по-прежнему нет.



почему нет конкретного ответа, я посмотрел на код ассемблера и пришел у видел то, что и ожидалось. Вот ассм прпрограмма написанная мной в спреде VC++6, поставив точки останова можно посмотреть значение регистров и переменных, ответ будет 0x80000000:
main()
{
int A;
bool wasOverflow = FALSE; // переменная, в которую бедет запизано TRUE в случае переполнения
A = INT_MAX + 1; // кладем максимальное чило, если добавим +1 то будет переполнение,
__asm{
push eax;
mov eax, A;

ADD eax, 1; // +1
jnc exit_assm
mov wasOverflow, TRUE
exit_assm:
pop eax;

}
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.