对于位操作符,由于系统不能确保如何处理其操作数的符号位,所以强烈建议使用unsigned整型操作数。
移位操作的右操作数不可以是负数,而且必须是严格小于左操作数位数的值。否则,操作的效果未定义。
位异或(互斥或,exclusive or)操作符(^)也需要两个整型操作数。在每个位的位置,如果两个操作数对应的位只有一个(不是两个)为 1,则操作结果中该位为 1,否则为 0。
重载的操作符与该操作符的内置类型版本有相同的优先级和结合性,如移动操作符<< >>.
移位操作符具有中等优先级:其优先级比算术操作符低,但比关系操作符、赋值操作符和条件操作符优先级高。若 IO 表达式的操作数包含了比IO操作符优先级低的操作符,相关的优先级别将影响书写该表达式的方式。通常需使用圆括号强制先实现右结合:
cout << 42 + 10; // ok, + has higher precedence, so the sum is printed
cout << (10 < 42); // ok: parentheses force intended grouping; prints 1
cout << 10 < 42; // error: attempt to compare cout to 42!
The second cout is interpreted as
第二个cout语句解释为:
(cout << 10) < 42;
该表达式说“将 10 写到 cout,然后用此操作(也就是 cout)的结果与 42 做比较”。
与其他二元操作符不同,赋值操作具有右结合特性。当表达式含有多个赋值操作符时,从右向左结合。上述表达式,将右边赋值操作的结果(也就是 jval)赋给 ival。多个赋值操作中,各对象必须具有相同的数据类型,或者具有可转换(第 5.12 节)为同一类型的数据类型:
int ival; int *pval;
ival = pval = 0; // error: cannot assign the value of a pointer to an int
string s1, s2;
s1 = s2 = "OK"; // ok: "OK" converted to string
赋值操作具有你优先级,
例如: while((i = get_value()) != 42) i = get_value() 需要用括号。加为赋值操作符的优先级低于不等操作符。
利用前置操作是个好惯,前置操作的性能要好点,它不用存储计算能前的值。
同时后自增操作的优先级高于解引用操作,加此*iter++ 等效于 *(iter++),子表达式 iter++ 使iter加1, 然后返回iter百年偕老的副本作为该表达式的结果。解引用操作×的操作娄是iter未加1前的副本。
解引用操作符低于点操作符,
Sales_item *sp = &item1;
(*sp).same_isbn(item2);
等价于 sp->same_isbn(item2);
条件操作符的优先级相当低 条件操作符是: cond ? expr1 : expr2;
条件操作符的优先级相当低。当我们要在一个更大的表达式中嵌入条件表达式时,通常必须用圆括号把条件表达式括起来。例如,经常使用条件操作符根据一定的条件输出一个或另一个值,在输出表达式中,如果不严格使用圆括号将条件操作符括起来,将会得到意外的结果:
cout << (i < j ? i : j); // ok: prints larger of i and j
cout << (i < j) ? i : j; // prints 1 or 0!
cout << i < j ? i : j; // error: compares cout to int
第二个表达式比较有趣:它将i和j的比较结果视为 << 操作符的操作数,输出 1 或 0。 << 操作符返回 cout 值,然后将返回结果作为条件操作符的判断条件。也就是,第二个表达式等效于:
cout << (i < j); // prints 1 or 0
cout ? i : j; // test cout and then evaluate i or j
// depending on whether cout evaluates to true or false
分享到:
相关推荐
Pascal转C++学习笔记——1.基本知识
Pascal转C++学习笔记——2.基本语句与体系
Cocos2d-x学习笔记——完全掌握C++ API与游戏项目开发.zip
组合和继承的主要目的是为了代码的重用。组合是将其他类的对象作为成员使用,继承是子类可以使用父类的成员方法。
个人网课学习笔记
C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体
学习笔记———《C++出错提示英汉对照表 》,供大家下载。
cpp代码-c++学习笔记——类与对象
【Visual C++】游戏编程代码\【Visual C++】游戏编程学习笔记之九:回合制游戏demo(剑侠客VS巡游天神) 配套代码
标准库为容器类型定义的操作很少,并没有为每个容器实现更多的操作。因为这部分操作可以抽象出来为所有的容器工作,那就是泛型算法。所谓“泛型”是指这些算法可以应用于多种容器类型上,而容器内的元素类型也可以...
一,算法 在当前状态下找出局部最优解,转化为全局最优解。 二,活动安排问题 1.问题描述:给定n个开区间(ai,bi),在给定范围内尽量选择多个区间,使得这些区间两两没有公共点。 2.算法:按照结束时间bi从小到大...
NULL 博文链接:https://cherishlc.iteye.com/blog/1756762
C++笔记总结,通过笔记课以掌握C++的重要知识点,非常值得一看
c++学习笔记1 leetcode1:两数之和(map与vector)(csdn)————程序
C++整理笔记word版 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。是01 C++学习笔记的后续补充 内存分区模型 引用 函数提高 类和对象 文件操作
个人整理的c/c++学习进阶方法,零基础轻松掌握关键知识点,是你在面向过程——>面向对象学习过程中的辅助利器! 话不多说,开始吧!!!
C++面向对象——B站黑马程序员视频学习笔记。