前言
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题.
类型转换
自动转换:
遵循一定的规则,由编译系统自动完成.
自动转换的原则:
-
占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低.
-
转换方向:
当表达式中出现了 char 、short int 、int 类型中的一种或者多种,没有其他类型了 参加运算的成员全部变成 int 类型的参加运算,结果也是 int 类型的。#include <stdio.h> int main( ) { printf("%d\n",5/2); return 0; }
当表达式中出现了带小数点的实数,参加运算的成员全部变成 double 类型的参加运算,结果也是 double 型。
#include <stdio.h> int main( ) { printf("%lf\n",5.0/2); return 0; }
当表达式中有有符号数 也有无符号数,参加运算的成员变成无符号数参加运算结果也是无符号 数.(表达式中无实数)
#include <stdio.h> int main( ) { int a=-8; unsigned int b=7; if(a+b>0) { printf("a+b>0\n"); } else { printf("a+b<=0\n"); } printf("%x\n",(a+b)); printf("%d\n",(a+b)); return 0; }
在赋值语句中等号右边的类型自动转换为等号左边的类型
#include <stdio.h> int main( ) { int a; float b=5.8f; //5.8 后面加 f 代表 5.8 是 float 类型,不加的话,认为是double 类型 a=b; printf("a=%d\n",a); return 0; }
强制转换
通过类型转换运算来实现 (类型说明符) (表达式)
功能
把表达式的运算结果强制转换成类型说明符所表示的类型
例如:
(float)a; // 把 a 的值转换为实型
(int)(x+y); // 把 x+y 的结果值转换为整型 注意:
类型说明符必须加括号
#include <stdio.h>
int main( ) {
float x=0;
int i=0;
x=3.6f;
i = x;
i = (int)x;
printf("x=%f,i=%d\n",x,i);
return 0;
}
说明: 无论是强制转换或是自动转换,都只是为了本次运算的需要,而对变量的数据长度进行的临时性转换,而不改变数据定义的类型以及它的值.
结语
数据转换基础的东西比较少,下一条就正式开始基础C语言的学习——运算符。