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
谢谢你们,我真的很难理解逻辑,但我想我现在明白了!