首页 > 用户发贴区 > 编程问题提问区 > int型数据的问题
2009
03-11

你好,我是一个C语言初学者。最近在自学C语言的时候发现一个问题,希望各位能不吝赐教,先行谢过了。


假设有两个int类型的数据a和b,并且他们的积超出了int型数据所能表示的范围,把这个积赋给事先定义为long型的c,即 c=a*b,为什么回出现错误?虽然a*b的值超出了范围,可是如果赋给c的话,并没有超出long型数据的范围啊,为什么还是错的呢?


int型数据的问题》有 8 条评论

  1. woxingwode 说:

    a和b的其中一个也得赋为长整型就行了

  2. woxingwode 说:

    感觉这个论坛的人不是很多,还是都跑到JAVA区去了啊

    我问的那个问题怎么没人给我解答一下啊

  3. linder 说:

    强制类型转换

    (lang)c=a*b;

     这样才行

     

  4. Freeze 说:

    #include<stdio.h>

    int main()

    {
    int a,b;
    long c;
    scanf(“%d%d”,&a,&b);
    c=a*b;
    printf(“%ld”,c);
    }

    没错啊 我估计是你编错了

  5. wxjwxjwkjl 说:

    [QUOTE=linder]

    强制类型转换

    (lang)c=a*b;

     这样才行

     

    [/QUOTE] 请问(lang)是什么???

  6. wxjwxjwkjl 说:

    根据每个人的系统不一样,结果就不一样!

    有些系统是支持32位的,也就是说你定义int型和long型都是一样的;所以有些人这么做就不会出错;看来你的系统是16位的!也就是说你的int是2字节,而long是4字节!32位系统的都是4字节;系统先算a*b,把a*b的结果最后在赋给C!注意算a*b的时候其实你的数据已经溢出,因为int*int是2字节的存储空间!最后的结果虽然是赋给4字节的!但是相当于把最后2字节的数据复制给了4字节的后2字节!所以你的结果还是错的!

  7. wxjwxjwkjl 说:

    这个问题你可以编写一个程序来试试这个结论是不是错误的!当然,这要等你学会了位运算之后才能知道怎么实验!

  8. linder 说:

    强值类型转换 long

    我不小心搞错了

    失误请原谅

留下一个回复