C中的MAXINT溢出

时间:2014-09-22 16:41:05

标签: c

定义最大整数变量时,出现错误:

overflow in expression; result is 2147483647 with type 'int' [-Winteger-overflow]

代码中的

行:

const int MAXINT = (1 << (8*sizeof(int)-1))-1;

使用的语言:C cpu:64bit(代码可能用32位机器编写)

请问,该怎么办?

1 个答案:

答案 0 :(得分:5)

此处可能发生溢出

(1 << (8*sizeof(int)-1))

而不是减1(溢出后):

const int MAXINT = ((1 << (8*sizeof(int)-2))-1)*2 + 1

注意:最好使用CHAR_BIT而不是8。但那通常会带来INT_MAX(@Jonathan Leffler)并且代码可以使用(@mafso)

const int MAXINT = INT_MAX;