Если у Вас есть тип данных, который больше, чем тот, который Вы хотите протестировать (скажите, что Вы делаете 32-разрядное добавляет, и у Вас есть 64-разрядный тип). Тогда это обнаружит, если переполнение произошло. Мой пример для 8-разрядного, добавляют. Но может быть увеличен.
uint8_t x, y; /* give these values */
const uint16_t data16 = x + y;
const bool carry = (data16 > 0xff);
const bool overflow = ((~(x ^ y)) & (x ^ data16) & 0x80);
Это основано на понятиях, объясненных на этой странице: http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/Comb/overflow.html
Для 32-разрядного примера, 0xff
становится 0xffffffff
, и 0x80
становится 0x80000000
, и наконец uint16_t
становится uint64_t
.
ПРИМЕЧАНИЕ : это ловит целочисленное переполнение дополнения/вычитания, и я понял, что Ваш вопрос включает умножение. В этом случае подразделение вероятно лучший подход. Это обычно - способ, которым calloc
реализации удостоверяются, что параметрические усилители не переполняются, поскольку они умножаются для получения заключительного размера.
После установки удалите установочный носитель (карта с интерфейсом USB, CD, DVD), что Вы использовали для установки.