有符号整数溢出:1111111*10不能在类型'中表示;长-长'; int get_dnum(长ccn,长di){ 长x=1; for(int y=1;y

有符号整数溢出:1111111*10不能在类型'中表示;长-长'; int get_dnum(长ccn,长di){ 长x=1; for(int y=1;y,c,C,long(默认情况下是有符号的)的长度应为(至少)64位,这意味着最大可表示数为(至少)+9223372036854775807(即2^63-1)。您指定的数字1111111111111111小于9223372036854775807,因此适合有符号的long。但是,您的数字乘以10超过了64位有符号的long的最大值。如果您声明x的类型为无符号的long,则您指定的乘法将艾德应该工作 祝你好运。你可能想在for语句中增加y,而不是x。600毫升的水可以装进一公升的瓶子。500毫升可以装进一公升

long
(默认情况下是有符号的)的长度应为(至少)64位,这意味着最大可表示数为(至少)+9223372036854775807(即2^63-1)。您指定的数字1111111111111111小于9223372036854775807,因此适合有符号的
long
。但是,您的数字乘以10超过了64位有符号的
long
的最大值。如果您声明x的类型为
无符号的long
,则您指定的乘法将艾德应该工作


祝你好运。

你可能想在for语句中增加
y
,而不是
x
。600毫升的水可以装进一公升的瓶子。500毫升可以装进一公升的瓶子。为什么600毫升和500毫升不能装进一公升的瓶子?
long
(默认情况下签名)应该是(至少)长度为64位,表示最大可表示数为(至少)+9223372036854775807(即2^63-1)。您指定的数字1111111111111111小于9223372036854775807,因此适合有符号的
long
。但是,您的数字乘以10超过了有符号的
long
的最大值。如果您声明
x
无符号的long
类型,则您将执行的乘法指定的应该有效。祝你好运。谢谢。我想我现在明白了。@BobJarvis你想回答这个问题吗?听起来是一个不错的,如果不是震撼世界的Q/a对。“但是,你的数字乘以10超过了64位长符号的最大值。”后面应该跟“。这是未定义的行为。”示例未定义的行为是一个运行时错误。使用unsigned long long确实可以防止数学溢出,但是即使它发生了数学溢出,也不会有未定义的行为,因为unsigned overflow被指定为“wrap”哈佛,麻省理工学院,达特茅斯,耶鲁大学和其他几所大学最近宣布了一个新的专业领域,它将把计算机科学系和法学院的工作结合起来。这个新的程序将训练个人在C和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;