【问题标题】:Doing operations between an int and double在 int 和 double 之间进行操作
【发布时间】:2014-09-02 21:12:02
【问题描述】:

我有一个基本 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 的。这是我作业中最简单的问题,我不知道。请帮忙!

【问题讨论】:

  • 首先,“我明白,因为它有一个 int 操作数,所以所有变量都转换为一个整数”——这甚至还不是真的。其次,您的 C 表达式 b+a/c-d 中没有大括号。您的数学表达式(4+2)/(3-4) 中有大括号。为什么会有差异?
  • 好吧,我现在觉得自己很蠢。那么最终答案是唯一被转换为整数的东西吗?看来我应该事先参加数学课复习哈哈。感谢您的帮助!

标签: c math int double operand


【解决方案1】:

你的表情

b+a/c-d

相同
b + (a/c) - d

由于ac 都是整数,所以商a/c 使用整数除法计算。这给了2/3 = 0。那么你有:

b - d

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

【讨论】:

  • 啊啊啊!现在我知道我哪里出错了。我想我需要对基本操作顺序进行一些审查。感谢您提供清晰的信息!
【解决方案2】:

你的操作顺序有点不对:

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

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

http://www.cplusplus.com/doc/tutorial/typecasting/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多