我有此操作(8 *(512 * 786432)),产品是3221225472
我尝试将它用于longlong,unsigned long
等变量但编译器给我一个错误
c4307积分常数溢出
我需要将结果用于函数,我该如何解决?或者哪些变量适用于大数?
问候
答案 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))