警告c4307 C中的积分常数溢出

时间:2014-01-31 23:51:21

标签: c++ c variables compiler-errors largenumber

我有此操作(8 *(512 * 786432)),产品是3221225472

我尝试将它用于longlong,unsigned long

等变量

但编译器给我一个错误

c4307积分常数溢出

我需要将结果用于函数,我该如何解决?或者哪些变量适用于大数?

问候

2 个答案:

答案 0 :(得分:20)

表达式(8 * (512 * 786432))的类型为int,它将在32位系统上溢出。将其分配给类型为long的变量不会更改该值已溢出的事实。你可以通过注释数字来解决这个问题。

long x = (8L * (512L * 786432L));

您只需将L放在其中一个数字上,因为它会强制结果也包含long类型。

这假设long是64位,这在大多数系统上都是如此,但在Windows上则不然。 Windows上需要LL(或i64)。

答案 1 :(得分:7)

尝试使用

(8 * (512ull * 786432))