Отлов переполнения при выполнении арифметических операций
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Здравствуйте.
Хочу отловить переполнение при выполнени арифметических операций. Например, есть переменная
x = 0xFF-2типаunsigned char. Если мы прибавим к ней 1, переполнения не возникнет, но если прибавим 3, то возникнет переполнение и значениеxстанет равно 0.Единственное, что я придумал, это проверять значение флага процессора
cfи написал вот такой код:Но есть две проблемы:
intel, а мне хочется кроссплатформенный способ.Как быть?
Я тут пораскинул мозгами и придумал: а что если в этом виноват
return flagизget_cf? По идее,returnэтоpushl код возврата, а в инструкциюpushlвходит%esp + 4, то есть арифметическая операция, где переполнения не возникает. Может в этом дело?Действительно, решение, как всегда лежало на поверхности :\
P.S.: А разве не наоборот? Должно же быть:
Нет, т.к. оператор постинкремента возвращает значение переменной до выполнения инкремента. А значение
iв правой части сравнения уже будет увеличенным на единицу. Т.е. порядок операндов в данном случае важен :)Всё понял, спасибо. Пойду дальше велосипеды изобретать :)