Возможно, это немного зависит от вашего компилятора. У меня были ошибки, подобные этим годам назад, и иногда вы можете получить ошибку времени выполнения, иначе в противном случае она будет полностью «обернуться» на действительно небольшое число, которое будет результатом измельчения битов самого высокого уровня и оставления остатка, т. Е. Если это 32 бит unsigned int, и результат вашего умножения будет 34-битным числом, он отрубит верхний бит 2-го порядка и даст вам остаток. Вам, вероятно, придется попробовать его на своем компиляторе, чтобы увидеть, что именно вы получаете, что может быть не то же самое, что вы получили бы с другим компилятором, особенно если переполнение происходит в середине выражения, где конечный результат находится в пределах диапазон беззнакового int.
Это похоже на дубликат http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-c-c –
Почему бы не попробовать и посмотреть, что вы получаете? В общем случае, когда неподписанный int переполняется, он переходит к нулю. Таким образом, 'UINT_MAX + 5' свертывается и становится 4. –
Это будет разница между максимальным значением uint и значением того, что было бы значением переполнения. Давайте сделаем это простым. Допустим, что max uint равно 5. Вы хотите добавить 2 * 4, поэтому это делает окончательное значение 3 вместо 8. –