C++教程|类型转换

C++语言程序设计教程|类型转换

类型转换

表达式是运算符与数据连接起来的表达运算的式子,表达式也称运算式。1
C++语言中的所有操作都是用表达式表示的。例如:下面就是一个常见的表达式:

a>b&&c<d||e>>3!=0

1. 自动转换

C++语言支持不同数据类型的数据之间的混合运算。在对这样的表达式求值时,需要对其中的一些操作数进行类型转换。表达式中的类型转换有两种方式:自动转换和强制转换。
各种类型的高低顺序如下所示:
在这里插入图片描述

  1. 若参与运算量的类型不同,则先转换成同一类型,然后进行运算,转换按数据长度增加的 方向进行,以保证精度不降低,且运算的结果(即表达式的值)的类型是运算式的最终类型。
  2. 所有的浮点型运算都是以双精度进行的,即使仅含float单精度运算的表达式,也要先转 换成double型,再作运算。
  3. bool、char型和short型参与运算时,必须先转换成int型。
  4. 逻辑运算符要求参与运算的操作数必须是bool型,如果操作数是其它类型,编译系统会自 动将非0数据转换为true,0转换为false。
  5. 位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行 类型转换。
  6. 在赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,可能丢失一部分数据,或降低精度。
int p=3.1; //降低了精度
float f=3.5;  //未降低精度
  1. 将signed型的整型变成较长的signed型的整型,unsigned型变成较长的整型时,原值以及正负符号不变。
int a=-2long b=a;
//值仍为-2
  1. 将unsigned型和同长度的signed型互变时,其值根据自身所属范围发生适当的变化。
unsigned short a=65535short int  b=a;//  b的值变成-1
short int  a=-2unsigned short  b=a;//  b的值变成65534

在这里插入图片描述

2. 强制类型转换

旧式的C语言风格的强制类型转换的格式如下:

类型说明符 (表达式)
(类型说明符) 表达式

例如:

int(a+b)     //将a+b运算的结果转换成int型
5/float(3)   //将3转换成float型
int a;float x=8.57;
a=(int)x;
//取整数部分,舍弃小数部分
//结果a=8,x仍为float型,其值仍为8.57。

注意:
➢ 采用强制类型转换将高类型数据转换为低类型数据时,数据精度可能会
受到损失。

标准C++强制类型转换:

static_cast <类型说明符> (表达式)
reinterpret_cast<类型说明符> (表达式)
const_cast <类型说明符> (表达式)
dynamic_cast <类型说明符> (表达式)

➢ static_cast用于一般表达式的类型转换。
例如:

 int  a;
 float  x=8.57;
 a=static_cast <int> (x);   //将变量x的类型转换成int型。

➢ reinterpret_cast用于非标准的指针数据类型转换,如将void 转换成char
➢ const_cast将const表达式转换成非常量类型, 常用于将限制const成员函数的const定义解除。
➢ dynamic_cast用于进行对象指针的类型转换。


  1. 本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皖山文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值