警告 C4307 积分常量溢出

问题描述 投票:0回答:2

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

我尝试将它与 longlong、unsigned long 等变量一起使用

但是编译器给我抛出一个错误

c4307 积分常量溢出

并且我需要将其与函数一起使用的结果,我该如何修复它?或者什么变量可以适用于大数?

c++ c variables compiler-errors largenumber
2个回答
22
投票

表达式

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

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

您只需将

L
放在其中一个数字上,因为它会强制结果也具有类型
long

这假设

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


7
投票

尝试使用

(8 * (512ull * 786432)) 
© www.soinside.com 2019 - 2024. All rights reserved.