C 为什么我们要分别投“一”字;浮动;整数除法?
例如:C 为什么我们要分别投“一”字;浮动;整数除法?,c,variables,C,Variables,例如: int number1 = 1, number2= 2; float variable = (float)number1/(float)number2; int number1 = 1, number2= 2; float variable = (float)(number1/number2); 与此相反,为什么我们不能只使用一次“float”?例如: int number1 = 1, number2= 2; float variable = (float)number1/(floa
int number1 = 1, number2= 2;
float variable = (float)number1/(float)number2;
int number1 = 1, number2= 2;
float variable = (float)(number1/number2);
与此相反,为什么我们不能只使用一次“float”?例如:
int number1 = 1, number2= 2;
float variable = (float)number1/(float)number2;
int number1 = 1, number2= 2;
float variable = (float)(number1/number2);
您可以编写任意一个表达式,但得到的结果不同 带
float变量=(float)(number1/number2)
变量中的值为0,因为除法是以整数除法进行的,1/2为0,并转换结果
带float变量=(float)number1/(float)number2
,变量中的值为0.5,因为除法是作为浮点除法进行的
float变量=(float)number1/(float)number2中的任意一个强制转换代码>可以省略,结果相同;在除法发生之前,另一个操作数将从int
转换为float
。您可以编写任一表达式,但得到的结果不同
带float变量=(float)(number1/number2)
变量
中的值为0,因为除法是以整数除法进行的,1/2为0,并转换结果
带float变量=(float)number1/(float)number2
,变量中的值为0.5,因为除法是作为浮点除法进行的
float变量=(float)number1/(float)number2中的任意一个强制转换代码>可以省略,结果相同;在除法发生之前,另一个操作数从int
转换为float
。由于number1
和number2
是int
s,因此执行的除法将是整数除法。因此,number1/number2
将计算为int
0。要执行浮点运算,您需要强制转换它们。请注意,简单地强制转换一个就足够了,因为另一个将被隐式提升。因此,您可以只说((float)number1)/number2
,因为number1
和number2
是int
s,所以执行的除法将是整数除法。因此,number1/number2
将计算为int
0。要执行浮点运算,您需要强制转换它们。请注意,简单地强制转换一个就足够了,因为另一个将被隐式提升。因此,您可以说((float)number1)/number2
目的是避免整数除法带来的截断。这要求除法的至少一个操作数是浮点数。因此,您只需要将一个强制转换设置为浮动,但要设置在正确的位置。比如说,
float variable = number1/(float)number2; // denominator is float
或
请注意,在第二个示例中,为了清楚起见,添加了一组额外的括号,但由于优先级规则,它与
float variable = (float)number1/number2; // numerator is float, same as above
还要注意,在第二个示例中
float variable = (float)(number1/number2);
对浮点的强制转换
在整数除法之后应用,因此这不会避免截断。由于表达式的结果被指定给一个浮点值
,因此它与
float variable = number1/number2;
目的是避免整数除法带来的截断。这要求除法的至少一个操作数是浮点数。因此,您只需要将一个强制转换设置为浮动,但要设置在正确的位置。比如说,
float variable = number1/(float)number2; // denominator is float
或
请注意,在第二个示例中,为了清楚起见,添加了一组额外的括号,但由于优先级规则,它与
float variable = (float)number1/number2; // numerator is float, same as above
还要注意,在第二个示例中
float variable = (float)(number1/number2);
对浮点的强制转换
在整数除法之后应用,因此这不会避免截断。由于表达式的结果被指定给一个浮点值
,因此它与
float variable = number1/number2;
在第一种情况下
1/2结果0
在第二种情况下,可以使用float一次,但它必须在除法之前与一个数字一起应用
在第一种情况下,1.0/2.0或1.0/2或1/2.0结果为0.5
1/2结果0
在第二种情况下,可以使用float一次,但它必须在除法之前与一个数字一起应用
1.0/2.0或1.0/2或1/2.0结果为0.5,因为整数除法截断。使用printf
显示两个计算的结果,您会发现第一个结果是0.5
,第二个结果是0.0
,因为1/2
截断为0
。number1/number2
是整数除法。事实上,第二个示例中的(float)
没有任何区别。因为除数操作会在转换为float之前截断小数位数。子表达式的计算通常不受其出现的上下文的影响。由于number1
和number2
都属于int
类型,因此(number1/number2)
使用int
-by-int
除法进行计算。将结果强制转换为浮点值不会改变这一点。非常相关:因为整数除法会截断。使用printf
显示两个计算的结果,您会发现第一个结果是0.5
,第二个结果是0.0
,因为1/2
截断为0
。number1/number2
是整数除法。事实上,第二个示例中的(float)
没有任何区别。因为除数操作会在转换为float之前截断小数位数。子表达式的计算通常不受其出现的上下文的影响。由于number1
和number2
都属于int
类型,因此(number1/number2)
使用int
-by-int
除法进行计算。将结果强制转换为浮动不会改变这一点。非常相关: