c语言中其不同数据类型,C语言中不同类型数据间的转换

§2.4 不同类型数据间的转换

2.4.1 基本概念

C语言允许数据值从一种类型转换成另一种类型。数据类型的转换有如下三种基本形式:

(1)同一类型但长度不同的数据间的转换。

(2)定点方式与浮点方式之间的转换。

(3)整型数中的有符号格式与无符号格式之间的转换。

下面介绍涉及数据类型转换的几个概念:

(1)提升与降格。由低级的数据转换为高级的数据,称为数据提升。相反的方向称为数据降格。同一长度的整数带符号与不带符号的属于同一级别。

(2)符号位扩展与零扩展。将signed型的整数提升为较长的signed型时,在增加的长度中各个位的状态与原来较短的数据中的符号位相同,称为符号位扩展。将unsigned型扩展为较长的整数时,增加的位全部置0,称为零扩展。

(3)最高位失去符号功能与最高位变成符号位。由signed型转换成同一长度的unsigned型时,原来的符号位失去符号功能而变成数值位。由unsigned型转换成同一长度的signed型时,最高位不再是数值位而成为符号位。

(4)截去小数与四舍五入。当一个实数转换为整数时,实数的小数部分全部舍去并按整数形式存储。当由double型转换为float型时,去掉多余的有效数字,但是按四舍五入处理。

(5)丢失精度。截去小数与四舍五入都会丢失一些精度。此外,由long型转换成float和double型时,有可能在存储时不能准确地表示该长整数的有效数字,精度也会受到损失。

(6)结果不确定与截去高位。浮点数降格时,当数据值超过了目标类型的取值范围时,所得到的结果是不确定的(其实也是有规律的,只是给出一个用户往往难以理解的数值)。当较长的整数转换为较短的整数时,要将高位截去,将会造成很大的误差。

2.4.2 不同数据类型的隐式转换

(1) 算术转换:不同类型的数值数据进行混合运算时要求将参加运算的运算量的类型统一成相同的数据类型。其转换规则如下:

char,short=>int=>unsigned int=>long=>unsigned

long

=>double<=float

(2) 赋值转换:C语言允许通过赋值使赋值号右边表达式值的类型自动转换为其左边变量的类型。

(3) 输出转换:输出数据时将输出项按指定的格式输出。注意:负数转换为无符号数以及实数转换为整数时会发生结果错误。

(4)

函数调用转换:如果函数调用时实参与形参类型不一致,则系统将实参转换成对应形参的类型。但并不是任何不同类型数据都可以在调用时自动转换,通常仍然要求实参与形参的类型保持一致。

2.4.3 不同数据类型的显式转换

C语言提供一种“强制类型转换”运算符,将一个类型的变量强制转换成另一种类型。它的一般语法格式为:

(类型标识符)(表达式)

注意:

(1) 显式转换实际上是一种单目运算。

(2) 当对一个变量进行显式转换后得到一个新的类型数据,但原来变量的类型没有发生变化。

本节中介绍了数据类型转换的各种情况。目的是让读者对编程序或上机过程中出现问题能够略知一二而不致于茫茫然。有关具体细节不要求也没有必要去死记,必要时查一下材料或上机试一个即可。但是,应了解数据类型转换是怎样回事,并对其建立初步的概念。

了解更多相关知识可进入视频学习