该程序哪里出现错误第二个运行结果不对。
3个回答
展开全部
这个是TC2.0的开发编译环境。
早期的编译系统,不会默认类型的自动转换,是比较不太智能的。
在TC2.0下,int的字节长度为2,long的字节长以为4
int可以表达的最大数为65535
long可以表达的最大数为4294967295
第二个数出现的问题就是类型没有自动转换。
才造成了对于计算结果高字节(long-int )的前2个字节被溢出了。结果就是
24320 = 3628800 & 0xffff;
解决办法是,让右边的参数包括一个long类型的值,这样编译器才会对计算的结果类型进行向上转换。
有以下几种可供参考。
1,对其中后一个数值表示为long类型,再运算
b = 1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
2,对其中后一个数值强制转换long类型,再运算
b = (long) 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
3,对b赋值后,让b参与运算
b=1;
b = b * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
修改代码后,先编译(alt+c+c);再运行(alt+r+r)
早期的编译系统,不会默认类型的自动转换,是比较不太智能的。
在TC2.0下,int的字节长度为2,long的字节长以为4
int可以表达的最大数为65535
long可以表达的最大数为4294967295
第二个数出现的问题就是类型没有自动转换。
才造成了对于计算结果高字节(long-int )的前2个字节被溢出了。结果就是
24320 = 3628800 & 0xffff;
解决办法是,让右边的参数包括一个long类型的值,这样编译器才会对计算的结果类型进行向上转换。
有以下几种可供参考。
1,对其中后一个数值表示为long类型,再运算
b = 1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
2,对其中后一个数值强制转换long类型,再运算
b = (long) 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
3,对b赋值后,让b参与运算
b=1;
b = b * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
修改代码后,先编译(alt+c+c);再运行(alt+r+r)
展开全部
1*2*3*4*5*6*7*8*9*10==3628800
24320==3628800%(0xffff+1)
你这个是turbo c?估计是windows下虚拟dos界面,这是16进制的东西了
我这里没有c语言编译器,我给个可能的解释
b=1*2*3*4*5*6*7*8*9*10;很明显右边是一个“字面常量”,且你没有声明右边的类型,比如L,U,之类的,那么编译器默认它是int的,在编译阶段编译器会先求出他的值(编译器就是个计算器)3628800,但是语法上他却必须默认是int(16位),那么编译器会把它截断,取低16位,
24320==3628800%(0xffff+1),把24320当做右值字面常量,
这是我估计的解释。
如果你有什么好的解释可以告诉我。
24320==3628800%(0xffff+1)
你这个是turbo c?估计是windows下虚拟dos界面,这是16进制的东西了
我这里没有c语言编译器,我给个可能的解释
b=1*2*3*4*5*6*7*8*9*10;很明显右边是一个“字面常量”,且你没有声明右边的类型,比如L,U,之类的,那么编译器默认它是int的,在编译阶段编译器会先求出他的值(编译器就是个计算器)3628800,但是语法上他却必须默认是int(16位),那么编译器会把它截断,取低16位,
24320==3628800%(0xffff+1),把24320当做右值字面常量,
这是我估计的解释。
如果你有什么好的解释可以告诉我。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
linux下运行无错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询