理解双重和整数

时间:2016-09-28 15:17:31

标签: c

绝对的初学者程序员,想知道你是否可以帮我理解一些结果和术语。我试图遵循程序逻辑以及如何处理某些值。以下案例是尝试理解这些概念的一个例子。

stl::map

我知道结果,因为我通过Visual Basic运行它。我努力追随的是它是如何运作的。

我的工作:
#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); } inum我认为值是&#39;并且可以与x或y互换使用。与dnumint_result相同。

首先dec_result是8.60

dec_result

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

不知何故,由于inum是一个整数,如果写为分数,则会截断值。但是,当括号中的剩余内容首先乘以那么它会变成小数位数吗?

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

第二次结果是8.75

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

为什么33/5位变为6? 它显示为占位符指定的小数位数,并由数据类型double指定。

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

应该是括号前指定的整数,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)(2.56 * 10 + 1)            =(int)(25.6 + 1)            =(int)(26.6)            = 26

因为该值应该是括号前指定的整数,并且int_result = (int) (dnum * 10 + 1); 占位符表示将值作为数字提供,没有小数点。

我的逻辑是否正确?

2 个答案:

答案 0 :(得分:3)

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

第一个结果:

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

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

第二个结果:

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

&#34;(double)inum / 4&#34;使用浮点运算计算,所以答案是2.75。 &#34; 33/5&#34;使用整数运算来计算,所以答案是6,总和是8.75

以下内容:

int_result = (int) dnum * 10 + 1;

变量dnum首先被转换为整数,因此使用整数运算:2 * 10 + 1 == 21

最后:

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

在这种情况下,&#34; dnum * 10 + 1&#34;首先计算,使用浮点运算完成:2.56 * 10 + 1 == 26.6。然后强制转换 - (int) - 截断为26。

答案 1 :(得分:2)

当算术运算符给出两个整数参数时,结果为integers, so any fraction is discarded. So 11/4 is 2 , not 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