C 理解双精度和整数

C 理解双精度和整数,c,C,绝对初学者程序员,不知道你能不能帮我理解一些结果和术语。我试图遵循程序逻辑,以及它是如何计算出某些值的。下面的案例是一个尝试和理解这些概念的示例 #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;

绝对初学者程序员,不知道你能不能帮我理解一些结果和术语。我试图遵循程序逻辑,以及它是如何计算出某些值的。下面的案例是一个尝试和理解这些概念的示例

#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);

}
那我就有点迷路了。。。2.75+6.6

不知何故,由于inum是一个整数,若将其写成分数,则该值会被截断。但括号中剩余的inum先相乘,然后变成一个小数位

它显示为占位符指定的小数位数和数据类型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
第二个12月的结果是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
为什么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);
我得到: =(整数)(2.56*10+1) =(整数)(25.6+1) =(内部)(26.6) =26

因为该值应为括号前指定的整数,并且
%d
占位符意味着以数字形式提供该值,不带小数点

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

我的逻辑正确吗?

只有当两个操作数都是整数(整数/整数、整数+整数等)时,C编译器才会执行整数运算,否则它将执行浮点运算(双精度/整数、双精度+整数等)

第一个结果:

11 (an integer) / 4 + (33.0) / 5
第一部分(11/4)是用整数算法计算的,所以答案是2 第二部分(33.0/5)是用浮点算法计算的,所以答案是6.6,和是8.6

第二个结果:

(double) inum / 4 + (33) / 5;
“double)inum/4”是使用浮点算法计算的,因此答案是2.75。 “33/5”是使用整数算术计算的,因此答案是6,总和是8.75

在以下方面:

int_result = (int) dnum * 10 + 1;
变量dnum首先被转换为整数,因此使用整数算法:2*10+1==21

最后:

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

在本例中,首先计算“dnum*10+1”,这是使用浮点运算完成的:2.56*10+1==26.6。然后cast-(int)-截断得到26。

当一个算术运算符得到两个整数参数时,结果是一个
整数,因此任何分数都被丢弃。因此
11/4
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

谢谢你们,我真的很难理解逻辑,但我想我现在明白了!