【C++程序设计】——运算符那些事

在这里插入图片描述


👨‍💻个人主页@开发者-削好皮的Pineapple!

👨‍💻 hello 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 削好皮的Pineapple! 原创

👨‍💻 收录于专栏C++程序设计


请添加图片描述

请添加图片描述


⭐前言⭐

当涉及C++程序设计中的运算符时,我们进入了一个非常基础但又至关重要的领域。在C++中,运算符不仅仅是用来执行基本的数学计算,它们还负责控制流程、管理内存、进行类型转换等关键任务。理解这些运算符的功能和用法,对于编写高效且可靠的程序至关重要。

本博客旨在探讨C++中各种运算符的细节及其在实际编程中的应用。我们将从最基础的算术运算符开始,逐步深入到赋值运算符、逻辑运算符、位运算符等更复杂的运算符类型。通过详细解释每种运算符的语法、用法和行为,读者将能够全面掌握它们在程序中的作用。

此外,我们还将讨论运算符的优先级和结合性,这对于理解表达式的计算顺序至关重要。深入探讨运算符的这些特性,有助于避免常见的错误并提高代码的可读性和可维护性。

最后,通过示例代码和实际应用场景的演示,我们将展示每种运算符如何在真实的编程任务中发挥作用。这将帮助读者将理论知识转化为实际应用能力,从而更加熟练地运用C++中的运算符进行程序设计。

总之,本博客旨在为初学者和有经验的开发人员提供一个全面且深入的运算符指南,帮助他们在C++编程中更加自信和高效地使用这些基本但关键的编程工具。


🎶一、算术运算符与算术表达式

(一)基本的算数运算符

+(加法运算符,或正值运算符。如3+5,+8);
-(减法运算符,或负值运算符。如3-5,-8);
*(乘法运算符。如3*5);
/(除法运算符。5/7);
%(模运算符,或求余运算符,%两侧应该均为整型类型,如7%4的值为3)。

如果参与+、-、*、/运算的两个数中有一个是float型数据,则运算结果是double型。C++在运算时对所有float型数据都按double型数据处理

(二)算术表达式和运算符的优先级与结合性

C++语言规定了运算符的优先级和结合性。在求解表达式时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如果在一个运算对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理。
C++规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右。“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。下图列出了所有运算符以及它们的优先级别和结合性。

在这里插入图片描述
(三)表达式中各类数值型数据间的混合运算
在表达式中常遇见不同类型的数据运算,在进行运算时,不同类型的数据通常会转换成同意类型,然后进行运算。
例如:10+'a'+i*f-d/e

运算次序为:①进行10+'a’的运算,先将a转换成整数97,运算结果为107。
②进行if的运算。先将i与f都转换成double 型,运算结果为double型。
③整数107与i
f的积相加。先将整数 107转换成双精度数(小数点后加若干个0,即107.000…00),结果为double 型。
④将变量e转换成double型,d/e结果为double型。
⑤将10+‘a’+i*f的结果与d/e的商相减,结果为double型。
上述的类型转换是由系统自动进行的。

在这里插入图片描述

(四)自增(++)和自减(–)运算符

在C和C++中,常在表达式中使用自增(++)和自减(–)运算符,它们的作用是使变量的值增1或减1。

  • ++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)
  • –i(在使用i之前,先使i的值减1,如果i的原值为3,则执行j=–i后,的值为2)
  • i++(在使用i之后,i的值加1,如果i的原值为3,则执行j=i++后,j的值为3,然后i变为4)
  • i- -(在使用i之后,使i的值减1,如果i的原值为3,则执行j=i–后,j的值为3,然后i变为2)
    粗略地看,++i和i++的作用相当于i=i+1,但++i和i++不同之处在于++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。如
    i=3;cout << ++i;
    输出4。如果改为
    cout <<i++;
    则输出3。
    正确地使用++和- -,可以使程序简洁、清晰、高效。
    自增(减)运算符在C++程序中是经常见到的,常用于循环语句中,使循环变量自动加1。也用于指针变量,使指针指向下一个地址。

(五)强制类型转换运算符
在表达式中不同类型的数据会自动地转换类型,以进行运算。
有时还可以利用强制类型转换运算符将一个表达式转换成所需类型。例如,

(double)a(将a转换成double类型)
(int)(x+y)(将x+y的值转换成整型)
(float)(5%3)(将5%3的值转换成float型)

强制类型转换的一般形式为
(类型名)(表达式)
注意:如果要进行强制类型转换的对象是一个变量,该变量可以不用括号括起来,如果要进行强制类型转换的对象是一个包含多项的表达式,则表达式应该用括号括起来,如果写成

(int)x+y

则只将x转换成整型,然后与y相加
以上强制类型转换的形式是原来C语言使用的形式,C++把它保留了下来,以利于兼容。C++还增加了以下形式:
如 类型名(表达式)

int(x)或int(x+y)

类型名不加括号,而变量或表达式用括号括起来。这种形式类似于函数调用。
需要说明的是在强制类型转换时,得到一个所需类型的中间数据,但原来变量的类型未发生变化。例如,
(int)x
如果x原指定为float型,值为3.6,进行强制类型运算后得到一个int型的中间数据,它的
值等于3,而x原来的类型和值都不变。
例子:强制类型转换。

#include<iostream>
using namespace std;
int main() {
	float x;
	int i;
	x = 3.6;
	i = (int)x;
	cout << "x=" << x << "," << "i=" << i << endl;
	return 0;
}

运行结果图:
在这里插入图片描述

由上可知,有两种类型转换,第1种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5,这种转换称为隐式类型转换。第2种是强制类型转换,也称显式类型转换
当自动类型转换不能实现目的时,可以用强制类型转换。如“%”运算符要求其两侧均为整型量,若x为float 型,则“x%3”不合法,必须用“(int)x %3”。
强制类型转换运算优先于%运算,因此先进行(int)x的运算,得到一个整型的中间变量,然后再对3求模。此外,在函数调用时,有时为了使实参与形参类型一致,可以用强制类型转换运算符得到一个所需类型的参数。



🎶二、赋值运算符和赋值表达式

(一)赋值运算符

赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。

(二)赋值过程中的类型转换
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时自动进行类型转换。
(1)将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。如i为整型变量,执行“i=3.56”的结果是使i的值为3,在内存中以整数形式存储。
(2)将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。如要执行“f=23”,将23赋给 float型变量f,按单精度指数形式存储在f中。如要执行“d=23”,即将23 赋给double 型变量d,则将23以双精度指数形式存储到d中。
(3)将一个double 型数据赋给float变量时,要注意数值范围不能溢出。例如,

float f;
double d =123.456789e100;
f=d;

就会出现溢出的错误,因为超过了float型的数据范围。

例子:有符号数据传送给无符号变量。
编写程序:

#include<iostream>
using namespace std;
int main() {
	unsigned short a;
	short int b = -1;
	a = b;
	cout << "a=" << a << endl;
	return 0;
}

运行结果:
65535
分析:负一的补码形式为1111111111111111;不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送

(三)复合赋值运算符

C++之所以采用这种复合运算符,一是为了简化程序,使程序精练;二是为了提高编译效率。
在这里插入图片描述

(四)赋值表达式
变量=表达式
C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。



🎶三、逗号运算符和逗号表达式

C++提供一种特殊的运算符——逗号运算符,又称为“顺序求值运算符”。用它将两个表达式连接起来。如:
3+5,6+8是一个逗号表达式。

  • 逗号表达式的一般形式为
    表达式1,表达式2
  • 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
  • 逗号表达式的一般形式可以扩展为:
    表达式1,表达式2,表达式3,…,表达式n它的值为表达式n的值。
    其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中。
  • C语言和C++语言表达能力强,其中一个重要方面就在于它的表达式类型丰富,运算符功能强,因而使用灵活,适应性强。


🎶四、关系运算和逻辑运算

(一)关系运算和关系表达式
C++的关系运算符有:
<、<=、>、>=优先级相同(高)
==、!=优先级相同(低)
关系表达式:用关系运算符将两个表达式连接起来的式子。
在这里插入图片描述

(二)逻辑常量和逻辑变量
C语言没有提供逻辑型数据,关系表达式的值(真或假)用数值1和0代表。
C++增加了逻辑型数据。逻辑型常量只有两个,即false(假)true(真)
逻辑型变量要用类型标识符bool来定义,它只的值只能是true和false之一。如

bool found,flag = false;//定义逻辑变量found和flag,并使flag的初值为false
found =true;//将逻辑常量true赋给逻辑变量 flag

由于逻辑变量是用关键字bool来定义的,故称为布尔变量。逻辑型常量又称为布尔常量
(三)逻辑运算和逻辑表达式
C++提供了三种逻辑运算符:

&&   逻辑与
||      逻辑或
!    逻辑非

逻辑表达式:将两个关系表达式用逻辑运算符连接起来。


请添加图片描述

结束语🥇

以上就是C++程序设计
持续更新C++程序设计教程,欢迎大家订阅系列专栏🔥C++程序设计你们的支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值