疫情所迫,希望用这种方法督促自己坚持学习。同时记录在找工作过程中的艰辛不易。博客内容持续增减修改,都为摘录和个人理解。欢迎各位批评指正其中错误,相互勉励,共同进步。
一、算数运算符
对于算数运算符类型如下所示。其中优先级顺序从上往下逐级递减。
需要注意的情况:
1、一元负号运算符与bool类型
bool a = True; //将a的值赋值为True
bool b = -a; //b的值也为True
经过上述赋值之后,b的值为True。实际上首先a的值被定义为1,因此b为-1。再转换为bool类型,而bool类型只有当为0时才为False。
2、取余运算符与
(-a) % b //等价于 - (a % b)
a % (-b) //等价于 (a % b)
(-a) % (-b) //等价于 - (a % b)
二、逻辑和关系运算符
需要注意的情况:
1、逻辑与与逻辑或
- 对于逻辑与,当且仅当左侧为真时,才会为右侧的表达式求值;
- 对于逻辑或,当且仅当左侧为假时,才会为右侧的表达式求值;
三、赋值运算符
赋值运算符的优先级小于关系运算符,因此在条件语句中,赋值部分通常应该加上括号。
int i;
while ((i = get_value()) != 42){
......
}
四、递增和递减运算符
递增和递减运算符为“++” “–”
int i = 0;
int a = ++i; //前置版本将i加1后的结果赋值给a,因此a=1,i=1
int b = i++; //后置版本,将i的结果给b,再将i加1,因此b=1,i=2
cout << i <<endl; //输出为2
需要注意的情况:
1、前置版本和后置版本的区别
除非必须,否则不用递增递减的后置版本。因为后置版本会额外开辟空间保存变化前的值。对于无需保存赋值前的值得代码,前置版本能大大优化程序执行效率,避免错误。
2、混用解引用和递增运算符
vector<int> nums = { 0,1,4,3,4,5,6 };
int *p = &nums[0];
cout << (*p)++ << endl; //输出结果为0
cout << *p++ << endl; //输出结果为1
五、成员访问运算符
成员访问运算符分为箭头运算符和点运算符
pt -> mem //箭头运算符
(*pt).mem //点运算符
六、条件运算符
条件运算符当条件成立时执行exper1语句,否则执行pxper2语句
cond ? exper1 : exper2;
将vector中的奇数变成平方值
vector<int> a = { 0,1,2,3,4,5,6,7,8,9 };
for (auto bed = a.begin(); bed != a.end(); ++bed)
*bed = (*bed % 2 == 0) ? *bed : *bed**bed;
for (auto &i : a)
cout << i << endl;
七、位运算符
八、sizeof运算符
sizeof (type)
sizeof expr
九、运算符优先级
淡云一笔,鞍落三服
单目 算数 移位 比较 按位 逻辑 三目 赋值