服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++中的运算符和表达式

C++中的运算符和表达式

2022-10-14 13:21机器学习入坑者 C/C++

这篇文章主要介绍了C++中的运算符和表达式,学习使用表达式,对数据类型进行处理.详细介绍内容需要的小伙伴可以参考下面文章相关内容

C++中的运算符和表达式

在编程语言中“表达式”可以近似于“公式”,也就是按照自己的预期进行某种计算,表达式由运算符合操作数等构成。C++中包含单目(一元)运算符、双目(二元)运算符和三目(三元)运算符,相应的构成了多种表达式。运算符具有优先级和结合性,优先级指先后计算次序,结合性指同级运算符时按照自左向右还是自右向左进行计算。

(1)算术表达式

算术表达式由算术运算符、操作数和括号构成,基本运算符包含:加+、减-、乘*、除\、取余%,只有“加、减”在做“正、负”符号时是一元运算符,其余情况都是二元运算符。C++拥有自加++和自减--两个一元运算符(python应该没有自加和自减,因为python中数值是不可变类型,改变值会申请新的内存),当表达式中存在自加或者自减运算时,一定要注意自加和自减是在操作数之前还是操作数之后,在操作数之前表示先自加再计算整个表达式,在操作数之后表示先计算整个表达式再自加,

比如下面的代码:

?
1
2
3
4
5
6
int age_1 = 22;
int age_2 = 22;
int new_age_1;
int new_age_2;
new_age_1 = age_1++;
new_age_2 = ++age_2;

第5行计算new_age_1时,先计算完整个表达式,再进行age_1的自加,所以new_age_1

等于22;第6行计算new_age_2时,先对age_2进行自加,再进行表达式计算,所以new_age_2等于23。自己在写代码时最好不要给自己挖坑,少使用过于复杂的表达式。

(2)赋值运算符

赋值运算符“=”是双目运算符,结合性是自右向左,允许连续赋值:

?
1
2
int x, y, z;
x = y = z = 1;

此外,C++还有+=、*=、/=等等运算符,结合性都是自右向左。

(3)逗号运算符

逗号运算符可以分隔两个表达式,先计算左边表达式再计算右边的表达式,但是由于逗号运算符的优先级低于赋值运算符,所以采用逗号运算符进行赋值时必须把逗号表达式括起来,

下面两行代码得到的x值是不同的:

?
1
2
x = (2, 3);
x = 2, 3;

第一行x等于3,第二行x等于2,因为逗号运算符的优先级低于赋值运算符,自己在使用中必须小心。

(4)关系运算符

关系运算符是逻辑表达式的基础,C++包含的关系运算符分两个优先级,较高的优先级为:大于、小于、大于等于和小于等于四种,分别用<、<=、>、>=来表示;较低的优先级为:等于、不等于,分别用==、!=表示。逻辑表达式返回的值为布尔类型,判断为真返回True(0),判断为假返回False(1),

如下:

?
1
2
3
4
int x = 2;
int y = 3;
bool result;
result = (x >= y);

C++还拥有三个逻辑运算符:与、或、非,分别用||、&&、!三个符号表示。

(5)三元表达式

据自己目前所知,C++唯一的三元运算符是条件运算符,其语法如下:

条件判断? 表达式1:表达式2

当判断条件成立时,执行表达式1;当判断条件不成立时,执行表达式2,

代码如下:

?
1
2
3
4
int x = 2;
int y = 3;
int result;
result = (x>y? 10: 1000);

由于x>y不成立,所以执行表达式2,也就是result被赋值为1000。

(6)sizeof函数

书中称sizeof为单独的运算符,为了便于理解这里把其视为函数。sizeof可以求取对象的占用的字节数,下面的例子计算了int类型占用的字节数:

?
1
2
int result=1000;
cout << sizeof(result) <<endl;

输出为4,表示int占用4个字节,这和理论上是一致的。

(7)数据类型转换

数据类型转换是编程语言面临的共同问题,对于表达式中存在多种数据类型的情况必须采用有效的处理策略。C++数据类型转换包含显式转换和隐式转换两种,下面分别进行介绍。

(7.1)显式转换

如果自己清晰的知道表达式中各个对象是什么类型,并且清晰的知道想要将对象变为何种新的类型,那么可以使用:类型说明符(表达式)进行显式的类型转换,

比如将float类型的x转换为int类型的y:

?
1
2
float x = 6.66;
int y = int(x);   

上述代码运行后y的值为6,仅仅取x的整数部分。显式类型转换时,如果自己选择的类型说明符的精度较低,比如上述代码中x为高精度,但是类型说明符int为低精度,则数据类型转换过程中造成了精度丢失。

(7.2)隐式转换

如果表达式中有高精度和低精度两种数据参与计算,会自动将低精度数据转换为高精度数据进行计算,这种隐式转换是没有精度丢失的安全转换:

?
1
2
3
float x = 6.66;
int y = 2;
cout << x+y <<endl;

上述代码中浮点x和整型y进行加法时,按照浮点类型进行计算输出6.66。

另外,逻辑表达式中0和非0数据分别会被转换为true和false,赋值表达式自动将等号右边的类型转换为等号左边的类型。

(8)总结

C++的包含的运算符和表达式总体来说和python差不多,类型转换的规则也很符合直观的理解。位运算符部分暂时没进行记录是因为其并不常用,等用到的时候再学习。

参考:

  • 郑莉《C++语言程序设计》

到此这篇关于C++中的运算符和表达式的文章就介绍到这了,更多相关C++运算符和表达式内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://zhuanlan.zhihu.com/p/96010209

延伸 · 阅读

精彩推荐
  • C/C++C++类和对象实例解析(二)

    C++类和对象实例解析(二)

    这篇文章主要介绍了C++类和对象,从定义出发再到实例解析,深入的理解C++类和对象,需要的朋友可以参考下...

    C++教程网11992021-03-06
  • C/C++一元多项式加法运算

    一元多项式加法运算

    今天小编就为大家分享一篇关于一元多项式加法运算,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    baiduoWang4902021-07-24
  • C/C++深度探究C++中的函数重载的用法

    深度探究C++中的函数重载的用法

    这篇文章主要介绍了C++中的函数重载用法,包括重载时参数类型的差异以及匹配和转换等方面问题的讲解,需要的朋友可以参考下...

    C++教程网9602021-03-22
  • C/C++C++实现LeetCode(120.三角形)

    C++实现LeetCode(120.三角形)

    这篇文章主要介绍了C++实现LeetCode(120.三角形),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang6612021-12-02
  • C/C++C语言中求和、计算平均值、方差和标准差的实例

    C语言中求和、计算平均值、方差和标准差的实例

    这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Littlehero_12110172021-10-11
  • C/C++C语言函数的基本使用和递归详解

    C语言函数的基本使用和递归详解

    一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递...

    周周汪6362021-12-30
  • C/C++C++Stack栈类模版实例详解

    C++Stack栈类模版实例详解

    这篇文章主要为大家详细介绍了C++Stack栈类模版实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给...

    诺谦11222022-10-08
  • C/C++EasyC++模板重载

    EasyC++模板重载

    这篇文章主要介绍了C++模板重载,重载的模板的函数特征,也就是入参的数量和类型必须有所不同,下面我们讲举例说明此内容,具有一定的参考价值,需...

    梁唐6322022-07-14