| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> [C++] 运算符 -> 正文阅读 |
|
[C++知识库][C++] 运算符 |
目录 运算符优先级 结合律:左结合律就是从左往右计算,右结合律就是从右往左计算。 1. 算术运算符算术运算符:加、减、乘、除、一元正号、一元负号、求余 注意: ? ? ? ? 1. % 与 / 运算符在处理负号上有不同,(-a)/b 与 a/(-b) 都等于 -(a/b)。 但是 (-a)%(b)= -(a%b) 而且a%(-b)= a%b、(-a)%(-b)= -(a%b)。? ? ? ? ? 2.参与%运算的必须是整型类型。 ????????3.算术异常:溢出(所求的值大于类型所能表示的范围)、数学性质(如除数时0等等)。
2. 逻辑和关系运算符逻辑运算符:!、&&、|| 关系运算符:<、>、<=、>=、==、!= 注意: ? ? ? ? 1.运算结果都是布尔型。 ? ? ? ? 2.布尔型只有在值为0时才为false,其余情况都为true,无论正负。 3. 赋值运算符赋值运算符:= 注意: ? ? ? ? 1.赋值运算符的优先级是所有运算符里比较低的,所以在使用时请据情况加上()。 ? ? ? ? 2.其满足右结合律,即可以这样赋值:a=b=0; b的类型必须可以转换为a的类型或者和a的类型一样。 4. 递增和递减运算符递增和递减运算符:前置递增递减(++i)、后置递增递减(i++) 前置递增递减:将改变后的对象作为求值结果,作为左值返回 后置递增递减:将改变前的对象的副本作为求值结果,将对象原始值的副本作为右值返回 用法:
建议:建议除非必须,则尽量少使用后置递增递减,因为其会产生一个副本造成浪费,而对于复杂的迭代器而言,这会造成很大的运行开销。并且,尽量不要把递增递减运算符作用的对象和对象本身共同用在同一个语句里,因为这样容易引起未定义行为,而造成报错。
5. 成员访问运算符成员访问运算符:. 和 ->
这两个效果是一样的。注意:(*p).size() 因为 * 的运算符要低于 . 运算符,所以要加上括号。 6. 条件运算符条件运算符:cond ? expr1 : expr2; 流程:cond是ture,则执行expr1,是false,则执行expr2
注意: ? ? ? ? 1.条件运算符可以嵌套使用,但为了程序的可读性,最好不要超过三层嵌套 ? ? ? ? 2.条件运算符的优先级很低,为避免错误在条件运算符里嵌套表达式时要注意添加括号 7. 位运算符位运算符作用于整数类型的运算对象,是直接对二进制位进行操作的,它在运算时,如果运算对象是小整形则会进行整型提升(见[C++] 类型转换),提升为大整型,提升为大整型之后,高位默认为0。 建议:使用位运算符来处理无符号类型。 7.1 移位运算符移位运算符:<<(左移运算符)、>>(右移运算符) 逻辑:两种运算符实际上就是对二进制位的移位操作,比如:左移运算符,val << x?,就是将val的二进制对象里的内容向左移动x位,然后将移动后的对象拷贝作为求值结果。 规则: 左移运算符:1.移动的位数,即右侧运算对象不能为负数,并且值必须小于结果的位数。 2.移出边界之外的值将会被舍弃。 右移运算符:1.如果左侧运算对象是无符号类型,在左侧插入值为0的二进制位,如果是有符号位,则在左侧插入符号位的副本。
7.2 位求反、位与、位或、位异或运算符位求反运算符:~ 逻辑:将运算对象的二进制位,全部求反。 位与运算符:& 逻辑:0&0=0,0&1=0,1&1=1 位或运算符:| 逻辑:0|0=0,0|1=1,1|1=1 位异或运算符:^ 逻辑:0^0=0,0^1=1,1^1=0
7.3 位运算符总结1.第一步,都是进行整型提升 2.位求反、位与、位或、位异或运算符都可以和赋值运算符进行复合,比如:|=,&=,等等 8. sizeof运算符形式:1. sizeof(type)??????? 2. sizeof expr 作用:sizeof运算符是用来求类型所占的字节数的,第一种形式是直接返回对象本身类型的大小,第二种形式是求,表达式返回的结果类型的大小,本质上都是求类型的字节数。 返回:size_t类型([c++] 数组)
注意: ??????? 1.对解引用指针执行sizeof,得到指针所指向的对象的类型所占空间的大小,即使是无效指针,也能获取。 ??????? 2.对数组执行sizeof,得到的是整个数组所占空间的大小,即数组里每个元素所占空间的和。由此可知,sizeof不会把数组换成指针来处理。所以可以通过sizeof来求得数组的容量:
??????? 3.对string对象和vector对象执行sizeof,只返回改类型固定部分的大小,不会计算对象中的元素占了多少空间。即如??? vector<int> v1{ 0,1,2,3,4 };????? sizeof(v1) 所得的值永远都是32,不会随着容器里面的元素改变而改变。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 8:52:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |