C中的类型自动提升(转)
(2012-06-06 22:59:07)
标签:
杂谈 |
分类: 烦死也要学技术=。= |
同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型。以下是自动类型转换的基本规则:
int main()
{
int a = 99,*e;
char b = 'b',c = b;
e = (int *)a;//必须强制类型转换!否则报error
b = a;
a = c;//这2个属于" = "的类型升降级
printf("b=%c,a=%d\n",b,a);
}
32位机
int
unsigned
int
-
C/C++/C#/Java语言中默认地写一个小数的数字,
它的类型是double, 不是float, 要想显式地表达它是float, 在数字后附加一个f或F.
-
C语言中的printf的%f
格式符不是代表 float, 而是代表fixed, 即以定点小数的形式显示, 而printf根本就没有显示一个float的格式符,
对于原型如printf(const char *, ...)
这样的函数,
传递一个 float给函数, 也会被先转换成double 进行调用. 这是C语言的类型提升规则.
- 与printf不对称的是, scanf家族的函数却有一个 %f来输入一个float, 以%lf来输入一个double, 注意不是%d来输入double, 因为printf中已经用了%d来表示一个decimal(十进制)的整数, scanf的设计为了尽量与之对称, 目的是减少程序员的记忆量.
- 不要以为C/C++语言中的强制类型转换一定不消耗CPU时间, 不对应CPU指令. 检查你的编译器的汇编输出.