你好,我是一个C语言初学者。最近在自学C语言的时候发现一个问题,希望各位能不吝赐教,先行谢过了。
假设有两个int类型的数据a和b,并且他们的积超出了int型数据所能表示的范围,把这个积赋给事先定义为long型的c,即 c=a*b,为什么回出现错误?虽然a*b的值超出了范围,可是如果赋给c的话,并没有超出long型数据的范围啊,为什么还是错的呢?
>> 本文固定链接: http://www.vcgood.com/archives/3073
你好,我是一个C语言初学者。最近在自学C语言的时候发现一个问题,希望各位能不吝赐教,先行谢过了。
假设有两个int类型的数据a和b,并且他们的积超出了int型数据所能表示的范围,把这个积赋给事先定义为long型的c,即 c=a*b,为什么回出现错误?虽然a*b的值超出了范围,可是如果赋给c的话,并没有超出long型数据的范围啊,为什么还是错的呢?
>> 本文固定链接: http://www.vcgood.com/archives/3073
你必须先 登录才能发表评论。
a和b的其中一个也得赋为长整型就行了
感觉这个论坛的人不是很多,还是都跑到JAVA区去了啊
我问的那个问题怎么没人给我解答一下啊
强制类型转换
(lang)c=a*b;
这样才行
#include<stdio.h>
int main()
{
int a,b;
long c;
scanf(“%d%d”,&a,&b);
c=a*b;
printf(“%ld”,c);
}
没错啊 我估计是你编错了
[QUOTE=linder]
强制类型转换
(lang)c=a*b;
这样才行
[/QUOTE] 请问(lang)是什么???
根据每个人的系统不一样,结果就不一样!
有些系统是支持32位的,也就是说你定义int型和long型都是一样的;所以有些人这么做就不会出错;看来你的系统是16位的!也就是说你的int是2字节,而long是4字节!32位系统的都是4字节;系统先算a*b,把a*b的结果最后在赋给C!注意算a*b的时候其实你的数据已经溢出,因为int*int是2字节的存储空间!最后的结果虽然是赋给4字节的!但是相当于把最后2字节的数据复制给了4字节的后2字节!所以你的结果还是错的!
这个问题你可以编写一个程序来试试这个结论是不是错误的!当然,这要等你学会了位运算之后才能知道怎么实验!
强值类型转换 long
我不小心搞错了
失误请原谅