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

inta=1920;intb=1080;intc=2000*(a*b)/(1920*1080);c变量这样赋值对吗????(a*b)会不会被系统默认转换成longlong... int a = 1920;
int b = 1080;
int c = 2000 * (a*b)/(1920*1080);
c 变量这样赋值对吗???? (a*b)会不会被系统默认转换成 long long int??
展开
 我来答
阿米不迷
2019-08-24 · 超过16用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:10.3万
展开全部

最好不要这样用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;

}

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

帐号已注销
2019-08-26 · TA获得超过3116个赞
知道大有可为答主
回答量:4114
采纳率:0%
帮助的人:277万
展开全部
不是默认的,需要预先定义。
另外,乘积的结果不能大于 int 的定义域,否则会被系统截位,出现系统不提示的错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式