2016-09-28 132 views
3

绝对的初学者程序员,想知道您是否可以帮助我理解一些结果和术语。我试图遵循程序逻辑以及它如何计算出某些值。以下案例是尝试理解这些概念的示例。理解双精度和整数

#include <stdio.h> 
void main() 
{ 
    int inum = 11; 
    double dnum = 2.56; 

    double dec_result; 
    int int_result; 

    dec_result = inum/4 + (3.0 * inum)/5; 
    printf("value in dec_result is %.2f\n", dec_result); 

    dec_result = (double) inum/4 + (3 * inum)/5; 
    printf("value in dec_result is %.2f\n", dec_result); 

    int_result = (int) dnum * 10 + 1; 
    printf("value in int_result is %d\n", int_result); 

    int_result = (int) (dnum * 10 + 1); 
    printf("value in int_result is %d\n", int_result); 

} 

我知道结果,因为我通过Visual Basic运行它。我正在努力遵循的是它如何实现它。

我的工作方式:
inumdnum我相信是“为价值观的名字”,并可能互换使用说x或y。与int_resultdec_result相同。

首先dec_result是8.60

dec_result = inum/4 + (3.0 * inum)/5; 
     11 (an integer)/4 + (3.0 * 11)/5 
     11 (an integer)/4 + (33.0)/5 

然后我有点失落...... 2.75 + 6.6?

不知何故,由于inum是一个整数,如果写成分数,值将被截断。但随着括号内的余数先乘以后它变成小数位数?

它按占位符指定的小数位显示,并由数据类型double指定。

二dec_result是8.75

dec_result = (double) inum/4 + (3 * inum)/5; 
     = as double is a cast operator you change inum from int to double, so therefore: 

     = (double) inum/4 + (33)/5; 
Then = inum/4 becomes 2.75 + 33/5 

为什么五分之三十三位变成6? 它按占位符指定的小数位显示,并由数据类型double指定。

int_result = (int) dnum * 10 + 1; 
     = cast operator alters dnum a double to integer so 2.56 becomes 2 

     = 2 * 10 + 1 
     = 20 + 1 
     = 21 

应该是一个整数作为支架之前,指定的,并且还%d占位符装置,以提供该值作为数没有小数点。

int_result = (int) (dnum * 10 + 1); 

我得到: =(int)的(2.56×10 + 1) =(int)的(25.6 + 1) =(INT)(26.6) = 26

,因为该值应该是括号前面指定的整数,也是占位符意味着提供值作为没有小数点的数字。

我的逻辑正确吗?

回答

3

只有在两个操作数都是整数(整数/整数,整数+整数等)的情况下,C编译器才会进行整数算术运算,否则将执行浮点运算(双精度/整数,双精度+整数等)

第一结果:

11 (an integer)/4 + (33.0)/5 

第一部分(11/4)被计算同的整数运算,所以答案是2 第二部分(33.0/5)计算与浮点运算,所以答案是6.6,总和是8。6

第二结果:

(double) inum/4 + (33)/5; 

“(双)INUM/4” 是使用浮点运算来计算,所以答案是2.75。 “5分之33”是使用整数运算来计算,所以答案是6,和总和为8.75

在下面:

int_result = (int) dnum * 10 + 1; 

可变dnum首先被浇铸到一个整数,所以整数算术用于:2 * 10 + 1 == 21

最后:

int_result = (int) (dnum * 10 + 1); 

在这种情况下, “dnum * 10 + 1” 被首先计算,这是使用浮动p完成oint运算:2.56 * 10 + 1 = 26.6。然后抛出 - (int) - 截去,以给出26.

2

当给算术运算符提供了两个整数参数时,结果是一个 2.75`。但是,当您将整数与浮点结合使用时,首先将整数转换为浮点,然后返回浮点结果。

结果:

dec_result = inum/4 + (3.0 * inum)/5; 
      = 11 /4 + (3.0 * 11) /5 
      = 11 /4 + (3.0 * 11.0)/5 
      =  2 + 33.0 /5 
      =  2 +   6.6 
      =   8.6 
+0

谢谢两位,我真的很努力理解的逻辑,但认为我想起来了! – Newtoprogram