首页 > 代码库 > c语言不寻常的类型转换(类型提升)

c语言不寻常的类型转换(类型提升)

对于一下代码:

printf("%d",sizeof(A));

你确定他打印的是1吗?

运行之后发现结果是 4 !

C语言 类型转换比一般人想像的还要多,在涉及小于int 和 double 的表达式中 , 都有可能出现类型转换!

根据提升规则:它由char 转换成为 int 。这个特性叫做类型提升 !

char  c1,c2;

...........

c1=c1+c2;

 下表给出了常见的类型提升的列表:

char -------------------------> int 

枚举(enum) -------------------------> int 

unsigned char-------------------------> int 

short-------------------------> int 

unsigned short -------------------------> int 

位段(bit-filed)-------------------------> int 

float -------------------------> double

 

‘整型提升‘,要求抽象机器把每个变量提升为int长度,然后对 两个 int 进行 加 运算,然后再对 结果进行裁剪。若两个char 的加法结果不会发生溢出异常,

那么实际执行只需要产生char 类型的运算结果,可以省略类型提升!

类似:

在: 

float f1,f2;

double d;

f1=f2*d;

若编译器确定用float 进行运算的结果与转换成double 的一样,那么也可以使用float 进行乘法运算!

隐士类型转换 是语言中的一种临机手段 ,起源于简化最初编辑器的想法。

c语言不寻常的类型转换(类型提升)