C语言基本数据类型转换
基本数据类型转换
1.自动类型转换
1.1介绍
- 当C程序在进行赋值或者运算时,精度小的类型自动转换为精度大的类型,这就是自动类型转换
1.2 数据类型按精度(容量)大小排序为
short --> int --> unsigned int --> long --> unsigned long --> float --> double --> long double
1.3 数据类型自动转换表规则
1.4 自动类型转换细节说明
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度最大的那种数据类型,然后再进行计算(如int 型和 short 型运算时,先把short转成int后再进行计算)
- 若两种类型的字节输不同,转换成字节数大是类型,若两种类型字节数相同,且一种有符号,一种无符号,则转换成无符号类型
- 在赋值运算中,复制号两边量的数据类型不同时,赋值号右边的类型将转换成左边的类型,如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入
- 代码演示
#include <stdio.h>
void main(){
char c1 = 'a';
int num1 = c1;
double d1 = num1;
short s1 = 10;
int num2 = 20;
int num3 = s1 + num2;
float f1 = 1.1f ;
double d2 = 4.24232346576;
f1 = d2 ;//出现精度损失
printf("f1=%.8f",f1);
getchar();
}
2.强制类型转换
2.1 介绍
- 将精度高的数据类型转换成精度小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出。
2.2 强制类型转换操作一般格式
- (类型名)表达式
- 什么是表达式:任何有值都可以称为表达式
- 这种强制类型转换操作并不改变操作数本身
2.3 案例演示
#include <stdio.h>
void main(){
double d1 = 1.978;
int num = (int)d1; //注意不是四舍五入,而是直接截断小数后的部分
//强制转换只对最近的数有效,如果希望针对更多的表达式转换,使用()
int num2 = (int)3.5 * 10 + 6 * 1.5;
int num3 = (int)(3.5*10+6*1.5);
printf("num3 = %d",num3);
printf("num = %d d1 = %f",num,d1);
getchar();
}
2.4 强制类型转换细节说明
- 当进行数据的从 精度高到精度低 ,就需要使用强制转换
- 强制转换只针对最近的操作数有效,往往会使用小括号提升优先级
2.5 练习
#include <stdio.h>
void main(){
char c = 'a';
int i = 5;
float d = .231f;
double d2 = 1.0;
double result = c + i + d;
char result = c + i + d + d2;//出现警告
getchar();
}

浙公网安备 33010602011771号