c中常用算术转换

char c;

short int s;

int i;

unsigned int u;

long int l;

unsigned long int ul;

float f;

double d;

long double ld;

i = i+c;  /* c is converted to int*/

i = i+s; /*s is converted to int*/

u = u+i;  /*i is converted to unsigned int*/

l = l+u;   /*u is converted to long int l*/

ul = ul+l;  /*l is converted to unsigned long int ul*/

f = f+ul;    /*ul is converted to float f*/

d = d+f;    /*f is converted to double d*/

ld = ld+d;   /*d is converted to long double ld*/

c语言会遵循另一条简单的转换规则,那就是把赋值运算右边的表达式转换成左边变量的类型。如:

char c;

int i;

float f;

double d;

i = c;   /*c is converted to int*/

f = i;    /*i is converted to float*/

d = f;    /*f is converted to double*/

把浮点数赋值给整型变量会丢掉改数的小数部分:

int i;

i = 842.97;   /*i is now 842*/

i = -842.97;   /*i is now -842*/

如果某值在变量类型范围之外,那么将得到无意义的结果。

c = 10000;   /*WRONG*/

i = 1.0e20;   /*WRONG*/

f = 1.0e100;   /*WRONG*/

如果浮点常量被赋值给float型变量时,一个很好的方法是在浮点常量尾部加上后缀f。如:

f = 3.14159f;

如果没有后缀,常量3.14159将是double类型,可能引起警告消息。

为了定义转换规则,C99允许每个整数类型具有“整数转换等级”。下面按从最高级到最低级的顺序排列。

(1)long long int , unsigned long long int

(2)long int , unsigned long int 

(3)int , unsigned int

(4)short int , unsigned short int

(5)char , signed char , unsigned char

(6)_Bool

C99用整数提升取代了C89中的整值提升,可以将任何等级低于int和unsigned int 的类型转换为int(只要该类型的所有值都可以用int类型表示),或unsigned int。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容