【问题标题】:warning c4307 integral constant overflow in C警告 c4307 C 中的积分常量溢出
【发布时间】:2014-01-31 23:51:21
【问题描述】:

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

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

但是编译器给我一个错误

c4307 积分常数溢出

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

问候

【问题讨论】:

    标签: c++ c variables compiler-errors largenumber


    【解决方案1】:

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

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

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

    这假定 long 是 64 位的,这在大多数系统上都是正确的,但不是 Windows。在 Windows 上您将需要 LL(或 i64)。

    【讨论】:

      【解决方案2】:

      尝试使用

      (8 * (512ull * 786432)) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 2019-09-23
        • 2021-03-03
        相关资源
        最近更新 更多