C++入门⑤:运算符以及类型转换

运算符

各个语言的运算符意义都大同小异,这里只简单的学习一下运算符的重载:

运算符重载指的是相同的符号进行多种操作,比如>>左移运算符表示将数左移若干位,但是在cin中,它被重载为输入标志。同样的还有各种算术运算符,根据运算数的类型的不同,被分别重载为int运算,double运算等。

类型转换

由于c++的数据类型众多,在实际编码的过程中总会遇到类型转换方面的问题。c++中的类型转换共有6种形式:

1. 初始化与赋值转换

诸如此类:int i = (int)5.5;,这也是在c与java种常见的,但是这样做有三个问题:

  • 将长度较长的整形赋值给长度较短的整形(eg:long→short)的时候,只取从小数若干位,直到填充该变量为止。
  • 将高精度浮点数赋值给低精度浮点数(eg:double→float)的时候会丢失精度,同时有可能会出现转换后的数值大于类型上限,此时会导致转换的结果不定。
  • 将浮点数赋值给整型的时候同样会丢失精度,也有可能会出现转换后的数值大于类型上限,此时会导致转换的结果不定。

2. 用{}方式转换数据

在c++11中添加了使用{}来进行类型转换,诸如int i {5.5},这种转换方式相比上一种方法要更为严格,具体体现在不允许将多位的值传递给少位(即long类型的数据无法转换为short类型,不论long类型的数据初值是多少)

3. 表达式中转换

在表达式中(诸如a = b + c;),数据类型的转换是根据c++的校验表转换的,具体规则如下:
(转换优先级从高到低)

  • 如果有一个操作数的类型为long double,则将所有的操作数转换为long double;
  • 否则,如果有一个早操作数的类型为double,则将所有的操作数转换为double;
  • 否则,如果有一个早操作数的类型为float,则将所有的操作数转换为float;
  • 否则,说明所有操作数都是整形,进行整型提升;
  • 如果两个操作数都是有符号或者无符号的,且有级别高低之分(长度不同),则将所有操作数转换为级别最高的类型;
  • 若有符号数与无符号数共存,且无符号数级别高于有符号数,则将所有操作数转换为该无符号操作数的类型;
  • 否则,如果有符号类型可以表示无符号类型的所有可能值,则将无符号操作数转换为有符号操作数所属的类型;
  • 否则,将两个操作数都转换为有符号类型的无符号版本。

简单来说,就是long double > double > float > unsigned long long > long long > unsigned long > long >unsigned int > int >unsigned short > short > unsigned char > char
如有错误,烦请指正。

4. 传递参数时的转换

这个主要在第七章中讲到,传递参数时的转换是由c++函数原型控制。

5. 强制转换

c标准为:(int) 7.5
c++ 标准为:int (7.5)
c++标准如此是为了使其代码风格与函数调用统一。

c++还引入了四个强制转换符,将在第十五章介绍。

6.auto声明

根据所赋初值的类型确定变量的类型,比如auto i = 5,将对i赋予int类型;auto i = 5.5,将对i赋予double类型。

auto的使用远非这么简单,将会在后续的学习中逐步深入。

本章(第四章)的章末习题过于简单,略过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值