4. 类型转换

4.1 在执行算术运算时,通常要求两个操作数有相同的大小(位数相同),并且存储方式也相同。例如:计算机可以直接将两个16为整数相加,但是不能直接将16位整数和32位整数相加,也不能直接将32位整数和32位浮点数相加。
4.2 如果我们一个表达式中混合使用了不同的数据类型,编译器会自动进行类型转换,这种转换叫做隐式转换。
4.3 程序员也可以进行强制类型转换,这种转换称为显示转换。
4.4 下面情况下,可以进行隐式转换:
当算术表达式或逻辑表达式中操作数类型不相同时
赋值运算中两端类型不相同时
函数调用中实参和形参类型不相同时
return 语句和函数的返回值不相同时
4.5 转换原则,小类型自动转换为大类型,整型转换为浮点型
如果任何一个操作数是浮点数的情况:
untitled7_1.png
如果都不是浮点数的情况:
untitled8_1.png
4.6 强制类型转换语法格式
(类型)表达式 例如:float f; int i = (int)f;
#include <stdio.h>
// 算术运算转换
void test1() {
           char c;
           short int s;
           int i;
           unsigned int u;
           long int l;
           unsigned long int ul;
           float f;
           double d;
           long double ld;
           // c自动转换为int类型
           i = i + c;
           // s 自动转换为int类型
           i = i + s;
           // i 自动转换为unsinged int类型
           u = u + i;
           // u 自动转换为long int类型
           l = l + u;
           // l 自动转换为 unsinged long int
           ul = ul + l;
           // ul 自动转换为float类型
           f = f + ul;
           // f 自动转换为double类型
           d = d + f;
           // d 自动转换为long double
           ld = ld + d;
}
// 赋值转换
void test2(){
           char c;
           int i;
           float f;
           double d;
           // c 自动转换为int
           i = c;
           // i 自动转换为float
           f = i;
           // f 自动转换为double
           d = f;
}
// 强制类型转换
void test3(){
           float f = 3.14;
           int i = (int)f;
           printf("i=%d",i);
}
int main(void) {
           //test1();
           //test2();
           test3();

}

该博客教程视频地址:http://geek99.com/node/968

原文出处:http://geek99.com/node/825#