一、自动类型转换
1.当运算符两边的数据类型不同时,C语言会帮我们将其转换为较大的类型。即将数据转换成表达范围更大的类型。
将前一种类型转换为后一种类型
char --> short --> int --> long --> long long
int --> float --> double
2.对于printf,任何小于int 的类型都会变转换成int;float会被转换成double
printf ("%f\n", a); \\无论是“float”还是“double”输出时都用"%f"即可,就是因为C语言会把float类型转换成double类型。
3.但是scanf不会,如果要输入short,需要%hd
#include<stdio.h>
int main()
{
short x;
scanf("%hd", &x);
printf("%d\n", x);
return 0;
}
二、强制类型转换
1.要把一个量强制转换成另一个类型(通常是较大类型转换成较小类型),就需要(类型)值
例如
(int)10.2
(short)32
2.转换时需要注意数据的安全性,小的变量不总能表达大的量,即大转小时大的不能超过小的类型所能表达的范围,否则就会出现错误。
#include<stdio.h>
int main()
{
printf("%d\n", 32768);
printf("%d\n", (short)32768);
printf("%d\n", (char)32768);
return 0;
}
3.强制类型转换只是从转换前的那个变量计算出了一个新的类型的值,并不会改变那个变量的值,也不会改变那个变量的数据类型。
#include<stdio.h>
int main()
{
int i = 32768;
short s = (short)i;
printf("%d\n", i);
printf("%d\n", s);
return 0;
}
4.强制类型转换的算术优先级高于四则运算。
double a = 1.0;
double b = 2.0;
int i = (int)(a/b);//i=0;
int a = 8;
int b = 6;
double i = (double)(a/b);//i=1.000000;