C 语⾔基本数据类型的⾃动转换和强制转换
浮点型变量float⽬录
C 语⾔基本数据类型的⾃动转换和强制转换
C 语⾔⾃动类型转换
当C程序在进⾏赋值或运算时,精度⼩的类型⾃动转换为精度⼤的数据类型,这个就是⾃动类型转换。 C语⾔数据类型按精度(容量)⼤⼩排序:(精度由低到⾼) 数据类型⾃动转换规则表:(低级⾃动转换为⾼级) C语⾔中,下⾯代码的⾃动转换是可以的(低级⾃动转为⾼级)。
C语⾔中,因为整形数据与浮点型数据存储⽅式不⼀样,所以下⾯的整形数据⽆法定义为浮点型数据。
编译时不会出现错误和警告,但是输出是出现错误输出,整形数据定义为浮点型输出数据都为0。
⾃动类型转换细节说明
1. 有多种类型的数据混合运算时,系统⾸先⾃动将所有数据转换成精度最⼤的那种数据类型,然后再进⾏计算(如:int型和short型运算时,先把short转成int型后再进⾏运算)。
输出:
2. 若两种类型的字节数不同,转换成字节数⼤的类型,若两种类型的字节数相同,且⼀种有符号,⼀种⽆符号,则转换成⽆符号类型。输出:
3. 在赋值运算中,赋值号右边量的类型将转换为左变量的类型,如果右边变量的数据类型长度⽐左边长,将丢失⼀部分数据,这样会降低精度,丢失的部分按四舍五⼊向前舍⼊。 C语⾔中低级数据类型赋值给⾼级数据类型: char  ch = 'a'; int  num = 15; double  fl = num ;
1
2
3 double  i = 12;//输出时错误
1#include  <stdio.h>int  main (){ int  num1 = 45; float  num2 = 60.722088; printf ("⼤的类型float %f\n",num1 + num2); printf ("⼩的类型int %\d\n",num1 + num2); return  0;}
1
2
3
4
5
6
7
89
⼤的类型float  105.722088⼩的类型int  -1342177280//错误的的输出结果
请按任意键继续. . .1
2
3 int  num1 = 56; unsigned  int  num2 = -99; printf ("转换为有符号型:%d\n",num1 + num2);
1
2
3
转换为有符号型:-43
请按任意键继续. . .1
2
则会显⽰警告:warning C4244: “=”: 从“double”转换到“float”,可能丢失数据且输出数据的精度也会有损失。
输出:
C 语⾔强制类型转换
将精度⾼的数据类型转换为精度⼩的数据类型。使⽤时要加上强制转换符(),但可能造成精度的降低或溢出,格外要注意。 强制类型转换的⼀般格式: (类型名)表达式 (表达式:任何有值的都可以称为表达式,如:1+2, int num = 2;) 这种强制类型转换操作并不改变操作数本⾝ C语⾔中,将精度⼤的数据赋值给精度⼩的数据会产⽣警告:
警告:
为了避免出现这种编译型警告,我们可以对精度⾼的数据类型进⾏强制转换。
这样编译时将不会出现warning。但是输出的数据精度会出现损失。原操作数fl本⾝内容不变。
强制类型转换细节说明
1.当进⾏数据从精度⾼转换为精度低时,不想要出现警告,就需要使⽤到强制转换。
2.强制转换符号只针对最近的操作数有效,往往会使⽤⼩括号提升优先级。程序会出现警告:warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据且运⾏输出结果为:42。
程序不会出现警告,且运⾏输出结果为47。 float  fl1 = 15.7f ; double  fl2 = 15.66666666; fl1 = fl2; printf ("fl1 float 类型输出:%.8lf\n",fl1);//精度损失 printf ("fl2 double 类型输出:%.8lf\n",fl2);//精度不会损失1
2
3
4
5fl1 float 类型输出:15.66666698fl2 double 类型输出:15.66666666请按任意键继续. . .
1
2
3 double  fl = 56.9999999; int  num = fl ;
12
warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据1 double  fl = 56.9999999; int  num = (int )fl ;//这⾥不是四舍五⼊,⽽是直接将⼩数点后的数据截断 printf ("%d\n",num );
1
2
356请按任意键继续. . .
12    //错误演⽰ int  num = (int )3.5 * 10 + 5 * 2.5;//只对离它最近的3.5强转为3,num = 3*10+5*2.5 printf ("%d\n",num );
1
2
3 int  num = (int )(3.5 * 10 + 5 * 2.5);//将3.5 * 10 + 5 * 2.5整个式⼦运算后结果为47.5,对47.5进⾏强转 printf ("%d\n",num );
1
2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。