1、混合使用数据时,注意系统对数据类型的自动转换
不同类型之间进行计算,转换规则就是一句:位数低的往位数高的扩展。转换规则:①字符型必须先转换成整型;②short型转换成int型;③float型在运算时一律先转换成double型;④int型与long型数据进行计算时,先将int转化成long型,结果为long型。
1.1 例子:
#include<stdio.h>
void main()
{
int a=10,aa=2;
float b=3.2;
printf("%f",a/b); //①
printf("%f",aa/a); //②
printf("%f",(double)aa/a); //③
printf("%f",(double)(aa/a)); //④
}
上面的程序可以正常编译。
结果:
3.125000
0.000000
0.200000
0.000000
②、这条语句,最后结果为:0.000000。首先要知道的是运算顺序,可能很多人傻傻的认为前面这个printf函数中的格式符“%f”对“aa/a”的运算有影响,然而并没有。系统会先计算aa/a,把结果用这一个中间值保存,这个中间值类型自然就是这个表达式最终的类型int,而计算的结果就是0,所以,最后结果是0.000000.
③、这条语句,最后结果为:0.200000。强制类型转换先把“aa”的值转化为了double型,又进行运算的。
④、这条语句,最后结果为:0.000000。这一句和第三句的区别,就很明显了,是对表达式的值进行了强制转换。
同时,不要把“a/b”,这个表达式看成错误的,认为“/”是一个取整符号,两边都应该是整型。这个“/”是除号,int c=(int)a / (int)b;这条语句有取整的功能。注意其和取余“%”用法的区别,如下:
1.2 取余“%”的用法
#include<stdio.h>
void main()
{
int a=10;
float b=3.2;
printf("%f",a%b);
}
这条语句会编译出错,因为类型使用错误。“%”当取余来用时,左右两边的数都应该为整型。
2、数据类型的后缀符号
C语言新标准对于常量增加了后缀修饰,1、int类型数据,加后缀u(U),用来表示整数常量是一个无符号数;