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

Mak*_*nux 6 c c++ variables largenumber compiler-errors

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

我试图将它用于longlong,unsigned long等变量

但编译器给我一个错误

c4307积分常数溢出

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

问候

Die*_*Epp 20

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

long x = (8L * (512L * 786432L));
Run Code Online (Sandbox Code Playgroud)

你只需要L在其中一个数字上加上,因为它会强制结果也有类型long.

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


Vla*_*cow 7

尝试使用

(8 * (512ull * 786432)) 
Run Code Online (Sandbox Code Playgroud)