C语言中的运算符升级(operatorpromotion)是什么?
当两个不同类型的运算分量(operand)进行运算时,它们会被转换为能容纳它们的最小的类型,并且运算结果也是这种类型。下表列出了其中的规则,在应用这些规则时,你应该从表的顶端开始往下寻找,直到找到第一条适用的规则。
-------------------------------------------------------------
运算分量1 运算分量2 转换结果
-------------------------------------------------------------
long double 其它任何类型 long double
double 任何更小的类型 double
float 任何更小的类 float
unsigned long 任何整数类 unsigned long
long unsigned>LONG_MAX unsigned long
long 任何更小的类型 long
unsigned 任何有符号类型 unsigned
-------------------------------------------------------------
下面的程序中就有几个运算符升级的例子。变量n被赋值为3/4,因为3和4都是整数,所以先进行整数除法运算,结果为整数0。变量f2被赋值为3/4.0,因为4.0是一个float类型,所以整数3也被转换为float类型,结果为float类型0.75。
#include <stdio.h>
main ()
{
float f1 = 3/4;
float f2 = 3/4.0
printf("3/4== %g or %g depending on the type used. \n",f1, f2);
}
-------------------------------------------------------------
运算分量1 运算分量2 转换结果
-------------------------------------------------------------
long double 其它任何类型 long double
double 任何更小的类型 double
float 任何更小的类 float
unsigned long 任何整数类 unsigned long
long unsigned>LONG_MAX unsigned long
long 任何更小的类型 long
unsigned 任何有符号类型 unsigned
-------------------------------------------------------------
下面的程序中就有几个运算符升级的例子。变量n被赋值为3/4,因为3和4都是整数,所以先进行整数除法运算,结果为整数0。变量f2被赋值为3/4.0,因为4.0是一个float类型,所以整数3也被转换为float类型,结果为float类型0.75。
#include <stdio.h>
main ()
{
float f1 = 3/4;
float f2 = 3/4.0
printf("3/4== %g or %g depending on the type used. \n",f1, f2);
}