为什么 "j= 2 * 3 / 4 + 2.0 / 5 + 8/5;" 中的 j 值设置为 2 而不是 3?
Why is the value of j in "j= 2 * 3 / 4 + 2.0 / 5 + 8/5;" set to 2 and not 3?
在这个程序中,j
被赋值为2
j = 2 * 3 / 4 + 2.0 / 5 + 8/5;
但如果用计算器计算相同的表达式,它会变成 3.5,所以在整数中它会变成 3。
我想问为什么j
赋值给了2?我错过了什么?
C 程序:
#include <stdio.h>
int main()
{
int i,j,k=0;
int line=0;
j = 2 * 3 / 4 + 2.0 / 5 + 8/5;
printf(" %d --------- \n", j);
k -= --j;
printf(" %d --------- \n", k);
for(i=0;i<5;i++)
{
switch(i+k)
{
case 1:
case 2:
printf("\n %d", i+k);
line++;
case 3:
printf("\n %d", i+k);
line++;
default:
printf("\n %d", i+k);
line++;
}
}
printf("\n %d", line);
return 0;
}
输出为:
2 ---------
-1 ---------
-1
0
1
1
1
2
2
2
3
3
10
j= 2 * 3 / 4 + 2.0 / 5 + 8/5;
2 * 3 / 4
和8 / 5
是整数除法。
使用:
2 * 3 / 4.0
和 8 / 5.0
进行浮点除法。
类似于:
j= 2 * 3 / 4 + 2.0 / 5 + 8/5;
2 * 3 / 4 Produce 1 -> it's integer
2.0 / 5 Produce 0.4 -> float
8/5 Produce -> 1.6 -> but in integer 1
Sum: 1 + 0.4 + 1 -> 2.4 -> converted to integer it's 2.
你必须强制转换或换句话说它是浮点数,除以 2 个整数,产生整数。
让我们一步一步来分析:
2*3/4 + 2.0 /5 + 8/5 // 8/5 gives 1, not 1.6 because it's integer division
6/4 + 0.4 + 1 // 2.0/5 is float division, so decimal place is left
1 + 0.4 + 1 // 6/4 gives 1, not 1.5 because it's integer division
2.4
2 //part after decimal point removed since j is int
2 * 3 / 4 + 2.0 / 5 + 8/5
*
和 /
是在 +
和 -
之前计算的,这导致第 3 个步骤:
整数计算(所有操作数都是整数)
2 * 3 / 4 = 6 / 4 = 1
浮点数计算(至少有一个运算符是浮点数)
2.0 / 5 = 2. / 5. = 0.4
整数计算(所有操作数都是整数)
8 / 5 = 1
最后 (1. and 2. and 3.) 的结果是:
浮点数计算(至少有一个运算符是浮点数)
1. + 0.4 + 1. = 2.4
分配给一个整数(向下截断)
int j = 2.4
导致 j
等于 2
。
在这个程序中,j
被赋值为2
j = 2 * 3 / 4 + 2.0 / 5 + 8/5;
但如果用计算器计算相同的表达式,它会变成 3.5,所以在整数中它会变成 3。
我想问为什么j
赋值给了2?我错过了什么?
C 程序:
#include <stdio.h>
int main()
{
int i,j,k=0;
int line=0;
j = 2 * 3 / 4 + 2.0 / 5 + 8/5;
printf(" %d --------- \n", j);
k -= --j;
printf(" %d --------- \n", k);
for(i=0;i<5;i++)
{
switch(i+k)
{
case 1:
case 2:
printf("\n %d", i+k);
line++;
case 3:
printf("\n %d", i+k);
line++;
default:
printf("\n %d", i+k);
line++;
}
}
printf("\n %d", line);
return 0;
}
输出为:
2 ---------
-1 ---------
-1
0
1
1
1
2
2
2
3
3
10
j= 2 * 3 / 4 + 2.0 / 5 + 8/5;
2 * 3 / 4
和8 / 5
是整数除法。
使用:
2 * 3 / 4.0
和 8 / 5.0
进行浮点除法。
类似于:
j= 2 * 3 / 4 + 2.0 / 5 + 8/5;
2 * 3 / 4 Produce 1 -> it's integer
2.0 / 5 Produce 0.4 -> float
8/5 Produce -> 1.6 -> but in integer 1
Sum: 1 + 0.4 + 1 -> 2.4 -> converted to integer it's 2.
你必须强制转换或换句话说它是浮点数,除以 2 个整数,产生整数。
让我们一步一步来分析:
2*3/4 + 2.0 /5 + 8/5 // 8/5 gives 1, not 1.6 because it's integer division
6/4 + 0.4 + 1 // 2.0/5 is float division, so decimal place is left
1 + 0.4 + 1 // 6/4 gives 1, not 1.5 because it's integer division
2.4
2 //part after decimal point removed since j is int
2 * 3 / 4 + 2.0 / 5 + 8/5
*
和 /
是在 +
和 -
之前计算的,这导致第 3 个步骤:
整数计算(所有操作数都是整数)
2 * 3 / 4 = 6 / 4 = 1
浮点数计算(至少有一个运算符是浮点数)
2.0 / 5 = 2. / 5. = 0.4
整数计算(所有操作数都是整数)
8 / 5 = 1
最后 (1. and 2. and 3.) 的结果是:
浮点数计算(至少有一个运算符是浮点数)
1. + 0.4 + 1. = 2.4
分配给一个整数(向下截断)
int j = 2.4
导致 j
等于 2
。