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 进行乘法运算!
隐士类型转换 是语言中的一种临机手段 ,起源于简化最初编辑器的想法。