long ans = ((long) INT_MIN) * 2 - 1; вызывая предупреждение из-за целочисленного переполнения - PullRequest
1 голос
/ 30 января 2011

У меня есть это в моем коде, и оно вызывает следующее предупреждение:

long ans = ((long) INT_MIN) * 2 - 1;  

Получаю предупреждение:

warning: integer overflow detected: op "*"

Я включил limit.h такчтобы я мог использовать INT_MIN

#include <limits.h>

Ответы [ 2 ]

4 голосов
/ 30 января 2011

Это означает, что расчет превысит диапазон long. Переполнение со знаком приводит к неопределенному поведению.

Единственная корреляция между диапазоном значений, представляемых long, и значением INT_MIN состоит в том, что INT_MIN представляется как long. Нет гарантии, что * менее чем вдвое INT_MIN представляется как long.

0 голосов
/ 30 января 2011

В Windows x86, используя компилятор Visual C ++, long равен 4 байтам , так же, как int. Попробуйте long long

...