C 在int和double之间执行操作

C 在int和double之间执行操作,c,math,int,double,operand,C,Math,Int,Double,Operand,我有一个basic C的家庭作业,要求我计算某些表达式,然后在程序中检查我的答案。根据我自己的计算,这些答案似乎都不正确 他们想让我用这些变量解决数学问题: int a = 2; double b = 4.7; int c = 3; double d = 4.2; 下面是一个示例问题: int answer1 = b+a/c-d; 我知道,因为它有一个int操作数,所以所有变量都转换成整数,所以它应该是这样的,我认为: (4+2)/(3-4) 当我手工做的时候,我得到了-6作为我的答案,但

我有一个basic C的家庭作业,要求我计算某些表达式,然后在程序中检查我的答案。根据我自己的计算,这些答案似乎都不正确

他们想让我用这些变量解决数学问题:

int a = 2;
double b = 4.7;
int c = 3;
double d = 4.2;
下面是一个示例问题:

int answer1 = b+a/c-d; 
我知道,因为它有一个int操作数,所以所有变量都转换成整数,所以它应该是这样的,我认为:

(4+2)/(3-4)

当我手工做的时候,我得到了-6作为我的答案,但是当我把它作为代码输入时,它给了我一个0的答案。有人能解释一下吗?我的操作顺序有错吗?我只是不明白计算机是如何从中得到0的。这是我作业中最简单的问题,我一点也不知道。请帮忙

你的表情

b+a/c-d

b + (a/c) - d
由于
a
c
都是整数,因此商
a/c
使用整数除法计算。这就给出了
2/3=0
。那么你有:

b - d

这是使用浮点计算的,因为
b
d
double
。结果是0.5,当分配给结果
int
时,它被截断为0。

您的操作顺序有点不正确:

int answer1 = b+(a/c)-d; 

int tmp1 = a/c; ---> 2/3 --> 0
int answer1 = 4.7 + 0 - 4.2 ----> 0.5 --> 0

首先,“我知道,因为它有一个int操作数,所以所有变量都转换成整数”——这一点还远远不是真的。其次,你的C表达式
b+a/C-d
中没有大括号。您的数学表达式
(4+2)/(3-4)
中有大括号。为什么不同?好吧,我现在觉得自己很愚蠢。那么,最终答案是唯一被转换成整数的东西吗?看来我应该事先上一节数学课复习,哈哈。谢谢你的帮助!啊!现在我明白我错在哪里了。我想我需要对基本操作顺序进行一些检查。感谢您提供的清晰度!