文章目录

  • 操作符
    • 1、算术操作符
    • 2、关系操作符
    • 3、逻辑操作符
    • 4、位操作符
    • 5、自增自减操作符
    • 6、赋值操作符
    • 7、条件操作符
    • 8、逗号操作符
    • 9、操作符优先级

操作符

计算机程序可以看作一串运算式,可以对各种运算类型进行运算。这种运算不仅仅是代数上的加减乘除,也可以是在计算机中存在的数据类型的改变,还可以是一种抽象的操作。比如说我们定义组装两个机械零件,那么我们也可以定义一种已知的操作“+”,使其能够表示组装零件的操作,总之,对于基本的整型、浮点数等的种种运算操作,我们都可以用操作符(Operator)来表示。操作符一般以一到两个特殊符号的形式出现。

    每个操作符要完成运算需要的数据,也就是操作数。不同的操作符所需要的操作个数是不一样的,“+”只需要两个操作数,因此也称为二元操作符。除此之外,还有一元操作符和三元操作符分别需要一个和三个操作数。操作数的类型会决定操作数的行为,例,“a+b”在a和b都是整数的情况下进行的是整数加法运算,而在a和b都是字符串的情况下进行的是字符串的连接。

1、算术操作符

    算术操作符用在数学表达式中,基本都是一些数学中常用的运算符号。

对于这些操作符有几个需要注意的地方:

    1.算数操作符都可以看做二元操作符操作两个操作数,其中“+”和“-”也可以作为数值的正负号,此时他们是一元操作符。2.除法和取余数操作符可以看做一对一的互补的操作符,对于整数除法“5/2”来说,除法得到整数的商,而小数部分0.5直接去掉,或是直接通过“5%2”获得余数1.这里不存在四舍五入的问题,而是直接去掉小数部分。3.取余操作不能对浮点数进行,至于“5%-2”这种带负数的取余,c++不同版本的标准对结果符号有着不同的规定,有的返回正数,有的返回负数,在实际编程中我们要以编程结果为准。
#include<iostream>
using namespace std;//算术操作符int main()
{int a = 5 ;int b = 2 ;cout << "+ a :" << (+a) <<endl;cout << "- a :" << (-a) <<endl;cout << "a + b :" << (a+b) <<endl;cout << "a - b :" << (a-b) <<endl;cout << "a * b :" << (a*b) <<endl;cout << "a / b :" << (a/b) <<endl;cout << "a % b :" << (a%b) <<endl;return 0;
}

可以看出,“+”作为取正符号时没有任何作用,“-”则会返回数字的相反数。

2、关系操作符

关系操作符用于比较数值的大小,这个概念与数学相同。不同的类型之间作比较会产生类型转换。对于浮点型来说“==”可能不太实用,因为他检查的是两个数完全相等,这在现实中是很少见的;如果两个数很接近,但是最后一个数不一样,比较相等就不会成功。

c++关系操作符

#include<iostream>
using namespace std;//算术操作符int main()
{int a = 5;int b = 2;int one = 1;bool t = true ;cout <<"a>b :" << (a>b) <<endl;cout <<"a<b :" << (a<b) <<endl;cout <<"a>=b:" << (a>=b) <<endl;cout <<"a<=b:" << (a<=b) <<endl;cout <<"t==one :" << (t==one) <<endl;cout <<"t!=one :" << (t!=one) <<endl;return 0;
}

程序运行后,5和2的比较都在意料之内的,而true和1是相等的。这是因为布尔值在这里遇到了整数,会发生类型转换,布尔值两个字面值true和false对应的数值量就是1和0.因为比较的两者不是同一类型,因此在运行过程中会出现警告,在操作中将bool和int类型混合不安全。

3、逻辑操作符

逻辑操作符包含了基本的逻辑与、逻辑或、逻辑非三种操作,逻辑与和逻辑或是二元操作符,逻辑非是一元操作符。

c++逻辑操作符
逻辑操作符是结果为布尔类型的表达式,一般用于跟关系操作符复合组成的复杂逻辑表达式。当然其他类型也可以作为操作数转化为true和false,或者是1和0,但是在表达式中使用非1,非0的数值并不是恰当的做法。

//逻辑操作符

#include <iostream>
using namespace std;//逻辑操作符int main()
{cout << "true && true : " << (true && true) << endl;cout << "true && false :" << (true && false) << endl;cout << "false && false:" << (false && false) << endl;cout << "true || true : " << (true || true) << endl;cout << "true || false :" << (true || false) << endl;cout << "false || false:" << (false ||false) << endl;cout << "! true : " << (! true ) << endl;cout << "!false : " << (! false) << endl;return 0;
}

例子展示了逻辑操作符对确定布尔值进行操作的各种可能结果。

//逻辑操作符与关系操作符的组合使用

#include<iostream>
using namespace std;//逻辑操作符与关系操作符的组合使用int main()
{int a = 2;int b = 5;cout <<"a < 3 && b < 3 : " << (a < 3 && b < 3 ) << endl;cout <<"a < 3 || b < 3 : " << (a < 3 || b < 3 ) << endl;cout <<"a < 3 && !b < 3 : " << (a < 3 && !b < 3) << endl;return 0;
}

由于 逻辑与 在一个操作数为false的情况下即为false,

       逻辑或 在一个操作数为true的情况下即为true;对于类似“(a<b)||(c<d)”这样的表达式,只要a<b已经为true,那么右边的c<d也不需要计算了,这种逻辑的算数求值方式叫做短路求职。

//短路求值

#include <iostream>
using namespace std;//短路求值int main()
{int a = 1;if ( a < 2 || ( a = 2 ) ){cout <<"a的值为 :"<< a << endl;}return 0 ;
}

可以看到,由于逻辑操作符“||”左边是true,即使右边的赋值表达式没有执行,最后打印出来的a的值依然是初始值1.

4、位操作符

位操作符就是把整型看作二进制为的序列,然后然后对每个位分别进行位操作。由于二进制每个位只可能是0或1,因此一些类似逻辑操作的运算可以运用在每一位上,也就是位与、位或、位求反和位异或。

//c++位操作符
//位与、位或、位异或、在不同二进制数值组合下的运算结果:

除此之外,位求反就是简单的将0变成1,将1变成0.

//位操作符

#include <iostream>
using namespace std;//位操作符int main()
{int a = 1; //0b01int b = 3; //0b11cout <<"a & b: " << (a & b) << endl;cout <<"a | b: " << (a | b) << endl;cout <<"a ^ b: " << (a ^ b) << endl;cout <<"~a : " << (~a) << endl;return 0;
}

程序的注释中标注了数字的二进制形式,分别是01和11.可以看到由于两个数的高一位并不都是1,因此位与的结果是0,而低一位都是1,所以结果是1,和在一起是01,也就是十进制的1.其他的以此类推。位或:二进制11,十进制3;位异或:二进制 10,十进制 2;位求反:二进制10,十进制2.

//左移和右移符操作符

左移和右移操作符就是把整型的每一位都左移或右移,例无符号二进制数01001001b,左移一位,右边补0,在左移一位,最左边的1才会移除,右移则相反。

#include<iostream>
using namespace std;//左移和右移操作符int main()
{unsigned int a = 4;cout << "a << 1: " << (a<<1) << endl;cout << "a >> 1: " << (a>>1) << endl;return 0;
}

输出结果为:a<<1 :8 ; a>>1 :2

5、自增自减操作符

//自增自减操作符

#include<iostream>
using namespace std;//自增自减操作符int main()
{int a = 2 ;cout << "a = " << a << endl;cout << "++a=" << ++a << endl;cout << "a++=" << a++ << endl;cout << "--a=" << --a << endl;cout << "a--=" << a-- << endl;return 0;
}

结果 :
这个结果可能会让人感到困惑,为什么a经过了两次递增,两次递减,结果却是3呢?

这是因为在a++之后先返回了原来a的值3,再加一个成为4,之后自减由于是–在前,则4-1成为3后返回给了cout,最后一个a–与a++类似,返回3的a的最终值为2.

6、赋值操作符

//赋值操作符
赋值操作符中,除了第一个“=”是基本操作符外,其他的都是与各种操作符复合而成的复合赋值操作符,以“a+=b”为例,他是“a=a+b”的缩写。

#include<iostream>
using namespace std;//赋值操作符int main()
{int a = 3 ;int b = 2 ;cout << "a += b:" << (a += b) <<endl;cout << "a -= b:" << (a -= b) <<endl;cout << "a *= b:" << (a *= b) <<endl;cout << "a /= b:" << (a /= b) <<endl;cout << "a %= b:" << (a %= b) <<endl;cout << "a <<=b:" << (a <<=b) <<endl;cout << "a >>=b:" << (a >>=b) <<endl;cout << "a &= b:" << (a &= b) <<endl;cout << "a ^= b:" << (a ^= b) <<endl;cout << "a != b:" << (a != b) <<endl;return 0;
}

结果:

7、条件操作符

//条件操作符

条件操作符是一个三元操作符,也是c++中唯一一个三元操作符。

#include<iostream>
using namespace std;//条件赋值符int main()
{int a = 3 ;int b = 2 ;int c = 5 ;int max = a > b ? a : b ;int min = a < c ? a : c ;cout << "max : " << max << endl;cout << "min : " << min << endl;return 0;
}

由例子可以看出,条件符由“?”和“:”两部分组成。“?”前面是一个结果为布尔表达式,而“:”前后则是这个条件为true和false时条件操作符会返回的表达式。此外由于“:”的前后没有什么限制,我们甚至可以嵌套另一个含条件操作符的表达式来进行更复杂的判断。

#include <iostream>
using namespace std;//嵌套条件操作符int main()
{int a = 3 ;int b = 2 ;int c = 5 ;int max = a > b ? (a > c ? a : c) : (b > c ? b : c);int min = a < b ? (a < c ? a : c) : (b < c ? b : c);cout <<"max :" << max << endl;cout <<"min :" << min << endl;return 0;
}

结果:

8、逗号操作符

//逗号操作符

#include<iostream>
using namespace std;//逗号操作符int main()
{int a = 3 ;int b = 2 ;int c = 5 ;int result = (c = b,b--,a++);cout <<"c =" << c <<endl;cout <<"b =" << b <<endl;cout <<"a =" << a <<endl;cout <<"result:" << result <<endl;return 0;
}

结果:
逗号操作符的操作数不一定得是变量或者是赋值表达式,也可以是其他表达式。

9、操作符优先级

相关资料可见:https://blog.csdn.net/qq_41565359/article/details/113878104

#include <iostream>
using namespace std;//操作符优先级int main()
{int a = 3;int b = 2;//((a+b)<(a-(b*0))) || (a>b)if (a+b < a-b*0 || a>b){cout << "条件成立!" <<endl;}return 0;
}

//右结合性

#include<iostream>
using namespace std;//右结合性int main()
{int a = 3;int b = 3;//c=(b=a+1)//如果是左结合性,等价于(c=b)=a+1int c = b = a + 1;cout << "c:"<<c <<endl;return 0;
}

这是右结合性,运行结果为c=4,这是因为右边的赋值先操作,b等于4以后在复制给c.如果是左结合性的情况,b的初始值3就会先赋值给c.

如果本文对您有帮助,请点赞支持一下~

c++ 操作符大全-算术操作符、关系操作符、逻辑操作符、位操作符、自增自减操作符、赋值操作符、条件操作符、逗号操作符、操作符优先级相关推荐

  1. 第三天学习Java的笔记(自增自减,赋值,比较,逻辑,三元)

    自增自减运算符Demo06Operator.java /*自增运算符:++:自减运算符:--含义:让一个变量涨一个数字1,或者让一个变量降一个数字1使用格式:写在变量名称之前,或者写在变量名称之后.例 ...

  2. 浏览器--常用的搜索操作符大全--使用/实例

    原文网址:浏览器--常用的搜索操作符大全--使用/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍搜索引擎(百度.谷歌等)的常用的搜索操作符的用法. 相关网址 高级搜索页面 可以直接用此网 ...

  3. java的自增自减_Java中自增和自减操作符(++/--)的那些事

    自增(++)和自减(--)运算符 在JAVA语言中存在着很多运算符,但是在实际开发中我们或许很少用到它们,在初次学习中却时常出现它们的身影,对于这些运算符的含义和用法,是否还记得呢? 1. 概述 自增 ...

  4. 《C++ Primer》关于自增自减操作符的描述错误

    <C++ Primer>5.5 P140 错误描述: Because the prefix version returns the incremented value, it return ...

  5. C++基础系列五:自增自减操作符、箭头操作符、new和delete操作符

    这一章的内容主要来自C++ Primer中文版第四版的第5章. (1)自增和自减操作符 自增和自减操作符有前置和后置两种形式,前置操作使用的是对象加1后的值,后置操作使用的则是对象加1前的值,推荐使用 ...

  6. 算术运算符、数学函数Math、数据类型转换、自增自减运算符、关系逻辑运算符、位运算符、括号及运算符级别

    文章目录 0.思维导图 1.算术运算符 2.数学函数与常量 3.数值类型之间的转换 (1)定义数据类型后自动转换 (2)二元运算时的自动转换 (3)强制类型转换 4.结合赋值与运算符 5.自增与自减运 ...

  7. C++ 的算术、自增自减、位运算、关系与逻辑运算符(数据的操作)

    一:前提知识 1 )运算符: 运算符包含了运算法则.优先级和结合性: 运算符优先级: 单目 > 算术 > (左移.右移) > 关系 > (按位与.异或.或) > 逻辑 & ...

  8. Java02-day02【运算符(赋值、关系、逻辑、三元、算数、自增自减)、分支语句(顺序结构、if语句)】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] &qu ...

  9. java怎么自增2_从头认识java-2.3 自增自减与关系操作符

    这一章节我们来聊聊自增自减与关系操作符. 1.自增自减其实没什么特别需要关注,只要把基础原理弄懂即可. package com.ray.ch03; public class Test { public ...

最新文章

  1. mysql免安装教程
  2. Oracle脚本批量导入时,输出日志文件
  3. linux bash shell for 循环使用简介
  4. linux对^M换行符的处理
  5. android中计算日期差,Android编程实现根据不同日期计算天数差的方法
  6. Unity3D基础8:C#脚本
  7. 辞退可以,暴力不行!
  8. Xgboost和lightgbm的区别
  9. 用计算机设置变大的命令按钮 vb,VB教程:命令按钮(CommandButton)
  10. NV21 旋转+转为NV12
  11. matlab norm函数使用_「matlabnorm」matlab中norm函数的用法 - 金橙教程网
  12. 临时邮箱,20分钟,30分钟,60分钟
  13. 小米手环如何连接苹果手机
  14. AI资源对接需求汇总: 第4期
  15. 如何关闭笔记本电脑触摸板功能
  16. 七夕情人节送什么礼物给女朋友?音质好的蓝牙耳机推荐
  17. 网上打印店可以急速打印东西吗?
  18. 薄膜温室贵不贵,一亩地温室大棚需要花多少钱?
  19. CentOS 7 下的软件安装方法及策略
  20. 尚硅谷--Linux篇

热门文章

  1. IP地址分类以及子网划分
  2. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
  3. 基于JAVA住房公积金筹集子系统的网站系统计算机毕业设计源码+系统+数据库+lw文档+部署
  4. mysql 客户端连接日志_MySQL 日志详解
  5. 2019上海米其林餐厅指南发布--完整名单
  6. OpenCV人脸识别 C++
  7. 苹果天气不显示_苹果自带闹钟这么神?用了5年iPhone才知道,懂的人绝不会卸载它...
  8. 1027-特色酒店后台管理系统servlet
  9. 大厂前端面试题总结(浏览器)
  10. element-ui远程搜索框,没有查询条件时显示历史搜索,有查询条件显示符合条件的数据(配合后端)