绝对的初学者程序员,想知道你是否可以帮我理解一些结果和术语。我试图遵循程序逻辑以及如何处理某些值。以下案例是尝试理解这些概念的一个例子。
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互换使用。与dnum
和int_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);
占位符表示将值作为数字提供,没有小数点。
我的逻辑是否正确?
答案 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