【发布时间】:2014-01-31 23:51:21
【问题描述】:
我有这个操作(8 *(512 * 786432)),产品是3221225472
我尝试将它与 longlong、unsigned long 等变量一起使用
但是编译器给我一个错误
c4307 积分常数溢出
我需要将结果与函数一起使用,我该如何解决?或者哪些变量适用于大数?
问候
【问题讨论】:
标签: c++ c variables compiler-errors largenumber
我有这个操作(8 *(512 * 786432)),产品是3221225472
我尝试将它与 longlong、unsigned long 等变量一起使用
但是编译器给我一个错误
c4307 积分常数溢出
我需要将结果与函数一起使用,我该如何解决?或者哪些变量适用于大数?
问候
【问题讨论】:
标签: c++ c variables compiler-errors largenumber
表达式(8 * (512 * 786432)) 的类型为int,它会在32 位系统上溢出。将其分配给long 类型的变量不会改变值已经溢出的事实。您可以通过注释数字来解决此问题。
long x = (8L * (512L * 786432L));
您只需将L 放在其中一个数字上,因为它会强制结果也具有long 类型。
这假定 long 是 64 位的,这在大多数系统上都是正确的,但不是 Windows。在 Windows 上您将需要 LL(或 i64)。
【讨论】:
尝试使用
(8 * (512ull * 786432))
【讨论】: