C 程序设计教程(07)—— 数据类型转换

C 程序设计教程(07)—— 数据类型转换

在这里插入图片描述

该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。

各种类型的数据可以混合运算,例如:

x = 10+'a'+1.5-12.34*'b';

在进行混合运算时,不同类型的数据要转换成同一类型的数据。

一、自动类型转换

混合于同一表达式中的不同类型常量及变量,应变换为同一类型的量。编译程序将所有操作数变换为与最大类型操作数同类型。具体规则如下:

(1)所有 char 及 short int 型量转换为 int 型,所有 float 转换为 double。

(2)如果操作数对中一个为 double,另一个转换为 double。否则,一个为 long,另一个转换为 long。

(3)一个为 unsigned,另一个转换为 unsigned。

通过以上规则,每一对操作数均变为同一类型。例如:

#include<stdio.h>
int main()
{
    
    
	char ch='A';
	int i=2;
	float f=2.5;
	double d=1.2,result;
	result=ch/i+f*d-(f+i);
	//(1)执行 ch/i=32,把ch转换为int类型 
	//(2)执行f*d=3.0,把f转换为double类型 
	//(3)执行f+i=4.5,把f和i转换为double类型 
	//(4)执行32+3.0-4.5=30.5 
	printf("%lf\n",result);
	return 0;
} 

以上程序的运行结果如下:

在这里插入图片描述

二、赋值类型转换

进行赋值运算时,当赋值运算符两边的数据类型不用时,将由系统自动进行类型转换。

转换的原则是:赋值运算符右边的数据类型转换成左边的变量类型。转换规则如下:

赋值运算符左侧类型 赋值运算符右侧类型 转换说明
float int 将整型数据转换成实型数据后再赋值。
int float 将实型数据的小数部分截去后再赋值。
long int、short 值不变
int、short long 右侧的值不能超过左侧数据值的范围。否则将会导致不可预料的结果。
unsigned signed 按原样赋值。右侧的值不能超过左侧数据值的范围。
signed unsigned 按原样赋值。右侧的值不能超过左侧数据值的范围。

例如:

#include<stdio.h>
int main()
{
    
    
	char ch;
	int i;
	float f;
	double d;
	long l;
	short s;
	i=1; 
	f=i;
	printf("%f\n",f);
	f=25.8;
	i=f;
	printf("%d\n",i);
	s=5;
	l=s;
	printf("%d\n",l);
	l=56;
	i=l;
	printf("%d\n",i);
	l=3466347634764;  //数值太大 
	i=l;
	printf("%d\n",i); //输出错误 
	return 0;
} 

以上程序的运行结果如下:

在这里插入图片描述

三、强制类型转换

强制类型转换通过类型转换运算来实现。格式为:

(type)exp;

其功能是把表达式的运算结果强制转化成类型声明符所表示的类型。例如:

#include<stdio.h>
int main()
{
    
    
	int i;
	for(i=1;i<=100;i++)
	{
    
    
		printf("%d/2 is:%f  ",i,(float)i/2);
		if(i%5==0) printf("\n");
	} 
	return 0;
} 

以上程序的运行结果如下:

在这里插入图片描述

说明:

(1)类型声明符和表达式都必须加括号(单个变量可以不加括号)。例如:(int)(x+y) 表示把 x+y 的运算结果强制转换为 int 型。而 (int)x+y 表示把 x 强制转换为 int 型之后再和 y 相加。

(2)无论是强制转换还是自动转换,都只是为了本次运算的需要而对变量进行的临时性转换,而不改变变量本身的类型。

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/128602940