Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我们要分别投“一”字;浮动;整数除法?_C_Variables - Fatal编程技术网

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
除法进行计算。将结果强制转换为浮动不会改变这一点。非常相关: