有符号整数溢出:1111111111111111111 * 10不能用'long long'类型表示

时间:2017-06-22 15:55:30

标签: c

int get_dnum(long long ccn,int di){
    long long x=1;
    for(int y=1;y<di;y++){
    x=x*(long long)10;
    }
    return ccn%x;

x长很长.10长很长。这个错误怎么发生?

  • 运行时错误:有符号整数溢出:1111111111111111111 * 10 不能用'long long'类型表示

1 个答案:

答案 0 :(得分:0)

long long(默认签名)应该是(至少)64位长度,这意味着最大可表示的数字是(至少)+9,223,372,036,854,775,807(即2 ^ 63-1) 。您指定的数字1,111,111,111,111,111,111小于9,223,372,036,854,775,807,因此符合签名long long。但是,您的数字乘以10会超过64位签名long long的最大值。如果声明x为unsigned long long类型,则指定的乘法应该有效。

祝你好运。