2.基本运算

一、算术运算符

运算符 功能
+(单目)
-(单目)
*(双目) 乘法
/ 除法
% 取模
+(双目) 加法
-(双目) 减法

类型转换规则如下所示:

  • charboolshort 等类型提升至 int (或 unsigned int ,取决于原类型的符号性)类型;
  • 如果存在一个变量类型为 long double ,则也会将另一变量转换为 long double 类型;
  • 否则,如果存在一个变量类型为 double ,则也会将另一变量转换为 double 类型;
  • 否则,如果存在一个变量类型为 float ,则也会将另一变量转换为 float 类型;
  • 否则,如果参与运算的两个变量均为整数类型:
    • 若两个变量符号性一致,则将位宽较小的类型转换为位宽较大的类型;
    • 否则,若无符号变量的位宽不小于带符号变量的位宽,则将带符号数转换为无符号数对应的类型;
    • 否则,若带符号操作数的类型能表示无符号操作数类型的所有值,则将无符号操作数转换为带符号操作数对应的类型;
    • 否则,将带符号数转换为相对应的无符号类型。

二、位运算符

位运算符用于对二进制数进行按位运算,这是计算机最底层的运算法则。学习位运算对后续诸多算法和数据结构都有很大的帮助。

运算符 功能
~ 逐位非
& 逐位与
` `
^ 逐位异或
<< 逐位左移
>> 逐位右移

三、复合赋值运算符

应用 意义
a+=b a=a+b
a-=b a=a-b
*= a=a*b
a/=b a=a/b
a%=b a=a%b
&= a=a&b
`a =b`
a^=b a=a^b
>>= a=a>>b
a<<=b a=a<

四、自增/自减运算符

有时我们需要让变量进行增加 1 1 1 或者减少 1 1 1,这时自增运算符 ++ 和自减运算符 -- 就派上用场了。

自增/自减运算符可放在变量前或变量后面,在变量前称为前缀,在变量后称为后缀,单独使用时前缀后缀无需特别区别,如果需要用到表达式的值则需注意,具体可看下面的例子。

i = 100;
op1 = i++;  // op1 = 100,先 op1 = i,然后 i = i + 1

i = 100;
op2 = ++i;  // op2 = 101,先 i = i + 1,然后赋值 op2

i = 100;
op3 = i--;  // op3 = 100,先赋值 op3,然后 i = i - 1

i = 100;
op4 = --i;  // op4 = 99,先 i = i - 1,然后赋值 op4

五、比较运算符

运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于

六、逻辑运算符

运算符 功能
&& 逻辑与
`
! 逻辑非
Result = op1 && op2;  // 当 op1 与 op2 都为真时则 Result 为真

Result = op1 || op2;  // 当 op1 或 op2 其中一个为真时则 Result 为真

Result = !op1;  // 当 op1 为假时则 Result 为真

七、运算符优先级

运算符 描述 例子
第一级别
:: 作用域解析符 Class::age = 2;
第二级别
++ 后自增运算符 for (int i = 0; i < 10; i++) cout << i;
-- 后自减运算符 for (int i = 10; i > 0; i--) cout << i;
第三级别
++ 前自增运算符 for (i = 0; i < 10; ++i) cout << i;
-- 前自减运算符 for (i = 10; i > 0; --i) cout << i;
+ 正号 int i = +1;
- 负号 int i = -1;
! 逻辑取反 if (!done) …
~ 按位取反 flags = ~flags;
* 指针取值 int data = *intPtr;
& 值取指针 int *intPtr = &data;
第四级别
第五级别
* 乘法 int i = 2 * 4;
/ 除法 float f = 10.0 / 3.0;
% 取余数(模运算) int rem = 4 % 3;
第六级别
+ 加法 int i = 2 + 3;
- 减法 int i = 5 - 1;
第七级别
<< 位左移 int flags = 33 << 1;
>> 位右移 int flags = 33 >> 1;
第九级别
< 小于 if (i < 42) ...
<= 小于等于 if (i <= 42) ...
> 大于 if (i > 42) ...
>= 大于等于 if (i >= 42) ...
第十级别
== 等于 if (i == 42) ...
!= 不等于 if (i != 42) ...
第十一级别
& 位与运算 flags = flags & 42;
第十二级别
^ 位异或运算 flags = flags ^ 42;
第十三级别
` ` 位或运算
第十四级别
&& 逻辑与运算 if (conditionA && conditionB) ...
第十五级别
` `
第十六级别
?: 条件运算符 int i = a > b ? a : b;
= 赋值 int a = b;
+= 加赋值运算 a += 3;
-= 减赋值运算 b -= 4;
*= 乘赋值运算 a *= 5;
/= 除赋值运算 a /= 2;
%= 模赋值运算 a %= 3;
<<= 位左移赋值运算 flags <<= 2;
>>= 位右移赋值运算 flags >>= 2;
&= 位与赋值运算 flags &= new_flags;
^= 位异或赋值运算 flags ^= new_flags;
` =` 位或赋值运算

八、作业

【入门1】顺序结构

你可能感兴趣的:(算法竞赛讲义,c++)