C语言两个int型数据相乘,结果类型会默认变成long long int?

int a = 1920;
int b = 1080;
int c = 2000 * (a*b)/(1920*1080);
c 变量这样赋值对吗???? (a*b)会不会被系统默认转换成 long long int??

最好不要这样用int,容易出错,可以先返回a*b,再赋值之后进行c的赋值

运行结果

源码:

#include <stdio.h>

int multiply( int a ,int b)

{

    return (a*b);

}

int main()

{

    int x, y, product,c;

    printf("please input two integers:");

    scanf("%d%d",&x, &y);

    product=multiply(x,y);

    printf("The product is %d\n", product);

    c=2000*product/(1920*1080);

    printf("c=%d\n",c);

    return 0;

}

追问

出错的原因是什么呢?我在代码中发现这样的BUG,但不知道为什么,是不是int之间的乘法运算隐式转换成了long long int ,再赋值给int后数据丢失??

追答

a*b还是int的,我说最好不要这样弄是为了防止溢出,你可以试一下这个,是可以运行的

源码:

#include<stdio.h>

int main()

{

int a = 1920;

int b = 1080;

int c = 2000*(a*b)/(1920*1080);

printf("%d\n",c);

return 0;

}

主要是如果你是大数运算的话就会溢出,运行结果会不符合实际

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-26
不是默认的,需要预先定义。
另外,乘积的结果不能大于 int 的定义域,否则会被系统截位,出现系统不提示的错误。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网