在C++中的运算符主要分为以下六大类:

  1. 算数运算符
  2. 赋值运算符
  3. 比较运算符
  4. 逻辑运算符
  5. 位运算符
  6. 杂项运算符

    一、运算符语法

    (一)算数运算符

  7. 加法:“+”;

  8. 减法:“-”;
  9. 乘法:“*”;
  10. 除法:“/”;

注:整型除法也是整型,小数除法是小数,除数不能为0

  1. 取模运算:“%”;

注:取模运算,求余数,除数不能为0

  1. 自加、自减运算符(*)

(1)前置

  1. int b1 = ++a1 * 10;

++a:前置递增,先进行自加1,再代入表达式进行计算,等价于如下指令(前置自减同理):

  1. a1 = a1 + 1;
  2. int b1 = a1 * 10;

(2)后置

  1. int b2 = a2++ * 10;

a++:后置递增,先将原始值带入表达式运算,再进行自加,然后执行下一条指令,等价于如下指令(后置自减同理):

  1. int b2 = a2 * 10;
  2. a2 = a2 + 1;

(二)赋值运算符

  1. 普通赋值:“=”;

    1. a = 100; //给变量a赋值为100
  2. 复合赋值:“+=”,“-=”,“*=”,“/=”,“%=”; ```cpp a = 10; a += 10; //等价于a = a + 10;

//运算结果为20 //“-=”,“*=”,“/=”,“%=” 同理

  1. <a name="fPaOa"></a>
  2. ## (三)比较运算符
  3. ```cpp
  4. // == 相等判别
  5. cout << (a == b) << endl;
  6. // != 不相等
  7. cout << (a != b) << endl;
  8. // <= 小于等于
  9. cout << (a <= b) << endl;
  10. // >= 大于等于
  11. cout << (a >= b) << endl;
  12. // > 大于
  13. cout << (a > b) << endl;
  14. // < 小于
  15. cout << (a < b) << endl;

(四)逻辑运算符

  1. 逻辑非:“!”;

    1. cout << !a << endl; //取反,真的反为假,假的反为真
    2. cout << !!a << endl;
  2. 逻辑于:“&&”;

    1. cout << (b && c) << endl; //同时为真,结果为真
  3. 逻辑或:“||”;

    1. cout << (b || c) << endl; //其中一个为真,即为真

    (五)位运算符

    位运算符作用于位,并逐位执行操作。
    (1)“&”:按位与操作,按二进制位进行”与”运算。
    (2)“|”:按位或运算符,按二进制位进行”或”运算。
    (3)“^”:异或运算符,按二进制位进行”异或”运算。运算规则:
    (4)“~”:取反运算符,按二进制位进行”取反”运算。运算规则:

    1. unsigned int a = 60; // 60 = 0011 1100
    2. unsigned int b = 13; // 13 = 0000 1101
    3. c = a & b; // 12 = 0000 1100
    4. cout << "Line 1 - c 的值是 " << c << endl ;
    5. c = a | b; // 61 = 0011 1101
    6. cout << "Line 2 - c 的值是 " << c << endl ;
    7. c = a ^ b; // 49 = 0011 0001
    8. cout << "Line 3 - c 的值是 " << c << endl ;
    9. c = ~a; // -61 = 1100 0011
    10. cout << "Line 4 - c 的值是 " << c << endl ;

    (5)“<<”:二进制左移运算符。将数的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
    (6)“>>”:二进制右移运算符。将数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

    1. int c = 0;
    2. c = a << 2; // 240 = 1111 0000
    3. cout << "Line 5 - c 的值是 " << c << endl ;
    4. c = a >> 2; // 15 = 0000 1111
    5. cout << "Line 6 - c 的值是 " << c << endl ;

    (六)杂项运算符

    在C++中还给出了一些其他的运算符,详情如下:

运算符 描述
sizeof sizeof 运算符返回变量的大小。例如,sizeof(int) 将返回 4。
Condition ? X : Y 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。
逗号运算符顺序执行一系列运算。逗号表达式的值是以逗号分隔的最后一个表达式的值。
“.”和“->” 成员运算符用于引用类、结构和共用体的成员。
(Type) 强制转换运算符把一种数据类型转换为另一种数据类型。如,int(2.2000) 将返回 2。
& 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。
* 指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。
  1. int a = 1;
  2. //sizeof
  3. cout << sizeof(int) << endl; //代码等价
  4. cout << sizeof(a) << endl;
  5. //运行结果
  6. //4
  7. //4
  8. //condition?X:Y
  9. int b = 0;
  10. int c = (a > b) ? a : b; //将a和b中较大的值赋给c
  11. cout << c << endl;
  12. //运行结果
  13. //1

二、运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
下表将按运算符优先级从高到低列出各个运算符:

优先级 运算符 说明 结合性
1 :: 范围解析 自左向右
2 ++ — 后缀自增/后缀自减
() 括号
[] 数组下标
. 成员选择(对象)
−> 成员选择(指针)
3 ++ — 前缀自增/前缀自减 自右向左
+ − 加/减
! ~ 逻辑非/按位取反
(type) 强制类型转换
* 取指针指向的值
& 某某的地址
sizeof 某某的大小
new, new[] 动态内存分配/动态数组内存分配
delete, delete[] 动态内存释放/动态数组内存释放
4 . -> 成员对象选择/成员指针选择 自左向右
5 * / % 乘法/除法/取余
6 + − 加号/减号
7 << >> 位左移/位右移
8 < <= 小于/小于等于
> >= 大于/大于等于
9 == != 等于/不等于
10 & 按位与
11 ^ 按位异或
12 | 按位或
13 && 与运算
14 || 或运算
15 ?: 三目运算符 自右向左
16 = 赋值
+= −= 相加后赋值/相减后赋值
*= /= %= 相乘后赋值/相除后赋值/取余后赋值
<<= >>= 位左移赋值/位右移赋值
&= ^= |= 位与运算后赋值/位异或运算后赋值/位或运算后赋值
17 throw 抛出异常
18 , 逗号 自左向右
  1. int a = 20;
  2. int b = 10;
  3. int c = 15;
  4. int d = 5;
  5. int e;
  6. e = (a + b) * c / d; // ( 30 * 15 ) / 5
  7. cout << "(a + b) * c / d 的值是 " << e << endl ;
  8. e = ((a + b) * c) / d; // (30 * 15 ) / 5
  9. cout << "((a + b) * c) / d 的值是 " << e << endl ;
  10. e = (a + b) * (c / d); // (30) * (15/5)
  11. cout << "(a + b) * (c / d) 的值是 " << e << endl ;
  12. e = a + (b * c) / d; // 20 + (150/5)
  13. cout << "a + (b * c) / d 的值是 " << e << endl ;

运行结果:

  1. (a + b) * c / d 的值是 90
  2. ((a + b) * c) / d 的值是 90
  3. (a + b) * (c / d) 的值是 90
  4. a + (b * c) / d 的值是 50

菜鸟教程:https://m.runoob.com/cplusplus/cpp-operators.html

END