
3.2 赋值运算符
变量的作用是指代数据。例如,你要去动物园看动物,那么,动物就是一个变量。具体看什么动物就是为这个变量赋值,或称为初始化变量的值。在讲解变量赋值时,就已经用到了赋值运算符。
3.2.1 赋值运算符简介
赋值运算符属于双目运算符,拥有两个操作数,符号为“=”。它与数学中的等于号一样,但是具体的功能却不同。赋值运算符的操作数位于其左右两侧,作用是将右侧的值赋给左侧,例如,a=b的含义是将变量b的值赋给变量a,a的值就会变为b的值,如图3.4所示。

图3.4 赋值运算符
【示例3-2】下面使用赋值运算符输出变量b的值。


程序运行结果如下。

3.2.2 数据类型转换
在饭店吃饭时我们常常会遇到抹零的问题,例如消费了101.5元,抹零后收101元。在此过程中就将浮点类型的数据101.5直接转换为整数类型数据101进行了计算。
在C++处理数据的过程中,也会遇到这种“抹零”的情况。数据在计算时也会发生数据类型转换的情况。数据类型转换在C++中可以分为两种,第一种是隐式转换,第二种是显式转换。下面对其进行讲解。
1.隐式转换
隐式转换指C++语言中不需要特别的声明就可以自动进行数据类型的转换。例如,从int类型数据转换到long类型数据就是一种隐式转换。
隐式转换适合类型尺寸大小相同或者将小尺寸转换为大尺寸的情况,类型的转换方向如图3.5所示。

图3.5 类型的转换方向
在这里char最小,double最大。在转换过程中遵循将小数据转换为大数据的原则就不会出现数据丢失的现象。
【示例3-3】下面将字符类型数据隐式转换为整型类型数据,并进行输出。

程序运行结果如下。

从运行结果中可以看出,在赋值运算时,字符p的类型发生了改变,b输出的是字符p的整数类型ASCII码值112。由于字符类型只占1字节,整型类型占4字节,所以从小尺寸转换到大尺寸,进行隐式转换并且没有出现数据丢失。
在赋值运算中,如果将大数据转换为小数据,那么在数据隐式转换过程中就可能会出现数据丢失或数据出错的问题,在编译时就会出现警告提示。
【示例3-4】下面将浮点类型数据隐式转换为短整型数据,并进行输出。

程序运行结果如下。

从运行结果中可以看出,变量b的值用短整型输出,超出了短整型的范围,所以输出的结果为错误值。变量c的值用短整型输出,丢失了小数位数据。
这两种情况都是由大尺寸数据隐式转换为小尺寸数据导致的。所以,在值的传递过程中一定要注意类型转换时的尺寸问题。
在C++语言的赋值运算中,将大尺寸隐式转换为小尺寸类型时是会出现警告的,由于警告不影响程序运算,所以一般不显示。此时只要对编译器进行简单设置就能看到警告信息。依次单击“项目|××属性”,在打开的对话框中将“将警告视为错误”选项设置为“是”,如图3.6所示。

图3.6 Visual Studio 2019设置警告为错误
再次运行程序看到警告信息,如图3.7所示。

图3.7 警告信息
2.显式转换
显式转换是指通过指定语法强制将数据转换为指定类型。这种转换需要指定的关键字配合来实现。显式转换的语法如下。

显示转换可以让程序员直接通过代码控制数据类型的转换,让数据按照指定类型数据进行计算。就像计算超级大的数据时,可以只计算整数部分,舍弃小数部分。这样做的优点是能控制要计算的数据类型,缺点是会丢失数据的精确度,所以在编写程序时要“因地制宜”,根据具体情况选择。
【示例3-5】使用显式转换让表达式的值为整型数据。

程序运行结果如下。

从运行结果中可以看出,当没有显式转换时,表达式a+b在运算时,b的值1会隐式转换为浮点型1.0,然后1.0+123.3的结果为浮点型数据124.3。
当使用显式转换时,表达式(int)a + b在运算时,a的值123.3会显式转换为123,然后123+1的结果为整型数据124。
注意:加法运算符(+)的作用与数学中的加号相同,如果不太明白可以先看看后面章节对加法运算符的讲解。