我有这个操作(8 *(512 * 786432)),产品是3221225472
我尝试将它与 longlong、unsigned long 等变量一起使用
但是编译器给我抛出一个错误
c4307 积分常量溢出
并且我需要将其与函数一起使用的结果,我该如何修复它?或者什么变量可以适用于大数?
表达式
(8 * (512 * 786432))
的类型为 int
,它会在 32 位系统上溢出。将其分配给类型为 long
的变量不会改变该值已已经溢出的事实。您可以通过注释数字来解决此问题。
long x = (8L * (512L * 786432L));
您只需将
L
放在其中一个数字上,因为它会强制结果也具有类型 long
。
这假设
long
是 64 位,这在大多数系统上都是如此,但在 Windows 上则不然。在 Windows 上您将需要 LL
(或 i64
)。
尝试使用
(8 * (512ull * 786432))