您的位置: 网站首页 > 程序开发 > C语言程序设计 > 第2章 基本数据类型及运算符 > 【2.6 类 型 转 换】

2.6 类 型 转 换

 

2.6 

在对赋值表达式求解过程中,如果赋值运算符两边的数据类型不一致,赋值时要进行类型转换。其转换工作由C编译自动实现,转换原则是以“=”左边的变量类型为准的。即将“=”右边的值转换为与“=”左边的变量类型一致。

【程序2-4用下面的程序进行说明:

/* 文件名:chap02_4.cpp */

#include <stdio.h>

void main()

{

    int i=5;    /*说明整型变量i并初始化为5*/

    float a=3.5,a1;     /*说明实型变量aa1并初始化a*/

    double b=123456789.123456789;   /*说明双精度型变量b并初始化*/

    char c='A';/*说明字符变量c并初始化为'A'*/

    printf("i=%d,a=%f,b=%f,c=%c\n",i,a,b,c);    /*输出iabc的初始值*/

    a1=i;i=a;a=b;c=i;   /*整型变量i的值赋值给实型变量a1,实型变量a的值赋给整型变量i,双精度型变量b的值赋值给实型变量a,整型变量i的值赋值给字符变量c*/

    printf("i=%d,a=%f,a1=%f,c=%c\n",i,a,a1,c);  /*输出iaa1c赋值以后的值*/

}

运行该程序的输出结果如下:

i=5,a=3.500000,b=123456789.123457,c=A

i=3,a=123456792.000000,a1=5.000000,c=(心形字符)

由以上运行结果可见:

float型数据赋值给int型变量时,先将float型数据舍去其小数部分,然后再赋值给int型变量。例如"i=a;"的结果是:int型变量i只取实型数据3.5的整数3

int型数据赋给float型变量时,先将int型数据转换为float型数据,并以浮点数的形式存储到变量中,其值不变。例如"a1=i;"的结果是:整型数5先转换为5.000000再赋值给实型变量a1。如果赋值的是双精度实数,则按其规则取有效数位。

double型实数赋给float型变量时,先截取double型实数的前7位有效数字,然后再赋值给float型变量。例如"a=b;"的结果是:截取double型实数123456789.123457的前7位有效数字1234567赋值给float型变量。上述输出结果中a=123456792.000000的第8位以后就是不可信的数据了。所以一般不使用这种把有效数字多的数据赋值给有效数字少的变量。

int型数据赋值给char型变量时,由于int型数据用2个字节表示,而char型数据只用1个字节表示,所以先截取int型数据的低8位,然后赋值给char型变量。例如上述程序中执行"i=a;"int型变量i的结果是3,而"c=i;"的结果是:截取i的低8位(二进制数00000011)赋值给char型变量,将其ASCII码对应的字符输出。