运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
杂项运算符
算术运算符 假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符
描述
实例
+
把两个操作数相加
A + B
将得到 30
-
从第一个操作数中减去第二个操作数
A - B
将得到 -10
*
把两个操作数相乘
A*B
将得到 200
/
分子除以分母
B / A
将得到 2
%
取模运算符,整除后的余数
B % A
将得到 0
++
自增运算符,整数值增加 1
A++
将得到 11
--
自减运算符,整数值减少 1
A--
将得到 9
取余运算只能针对整数,%
的两边都必须是整数,不能出现小数,否则编译器会报错。 余数可以是正数也可以是负数,由 %
左边的整数决定:
如果 %
左边是正数,那么余数也是正数;
如果 %
左边是负数,那么余数也是负数;
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <iostream> using namespace std; int main () { int a = 21 ; int b = 10 ; int c; c = a + b; cout << "Line 1 - c 的值是 " << c << endl ; c = a - b; cout << "Line 2 - c 的值是 " << c << endl ; c = a * b; cout << "Line 3 - c 的值是 " << c << endl ; c = a / b; cout << "Line 4 - c 的值是 " << c << endl ; c = a % b; cout << "Line 5 - c 的值是 " << c << endl ; int d = 10 ; c = d++; cout << "Line 6 - c 的值是 " << c << endl ; d = 10 ; c = d--; cout << "Line 7 - c 的值是 " << c << endl ; return 0 ; }
结果:
1 2 3 4 5 6 7 Line 1 - c 的值是 31 Line 2 - c 的值是 11 Line 3 - c 的值是 210 Line 4 - c 的值是 2 Line 5 - c 的值是 1 Line 6 - c 的值是 10 Line 7 - c 的值是 10
关系运算符 假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符
描述
实例
==
检查两个操作数的值是否相等,如果相等则条件为真。
(A == B
) 为假。
!=
检查两个操作数的值是否相等,如果不相等则条件为真。
(A != B
) 为真。
>
检查左操作数的值是否大于右操作数的值,如果是则条件为真。
(A > B
) 为假。
<
检查左操作数的值是否小于右操作数的值,如果是则条件为真。
(A < B
) 为真。
>=
检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
(A >= B
) 为假。
<=
检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。
(A <= B
) 为真。
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include <iostream> using namespace std; int main () { int a = 21 ; int b = 10 ; int c ; if ( a == b ) { cout << "Line 1 - a 等于 b" << endl ; } else { cout << "Line 1 - a 不等于 b" << endl ; } if ( a < b ) { cout << "Line 2 - a 小于 b" << endl ; } else { cout << "Line 2 - a 不小于 b" << endl ; } if ( a > b ) { cout << "Line 3 - a 大于 b" << endl ; } else { cout << "Line 3 - a 不大于 b" << endl ; } a = 5 ; b = 20 ; if ( a <= b ) { cout << "Line 4 - a 小于或等于 b" << endl ; } if ( b >= a ) { cout << "Line 5 - b 大于或等于 a" << endl ; } return 0 ; }
结果:
1 2 3 4 5 Line 1 - a 不等于 b Line 2 - a 不小于 b Line 3 - a 大于 b Line 4 - a 小于或等于 b Line 5 - b 大于或等于 a
逻辑运算符 假设变量 A 的值为 1,变量 B 的值为 0,则:
&&
:逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B
) 为假。||
:逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B
) 为真。!
:逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B)
为真。
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <iostream> using namespace std; int main () { int a = 5 ; int b = 20 ; int c ; if ( a && b ) { cout << "Line 1 - 条件为真" << endl ; } if ( a || b ) { cout << "Line 2 - 条件为真" << endl ; } a = 0 ; b = 10 ; if ( a && b ) { cout << "Line 3 - 条件为真" << endl ; } else { cout << "Line 4 - 条件不为真" << endl ; } if ( !(a && b) ) { cout << "Line 5 - 条件为真" << endl ; } return 0 ; }
结果:
1 2 3 4 Line 1 - 条件为真 Line 2 - 条件为真 Line 4 - 条件不为真 Line 5 - 条件为真
位运算符 假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
1 2 3 4 5 6 7 8 A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
& 按位与运算符 按位与操作,按二进制位进行 与
运算。运算规则:
1 2 3 4 0 &0 =0 ; 0 &1 =0 ; 1 &0 =0 ; 1 &1 =1 ;
(A & B
) 将得到 12,即为 0000 1100
。
| 按位或运算符 按位或运算符,按二进制位进行 或
运算。运算规则:
1 2 3 4 0 |0 =0 ; 0 |1 =1 ; 1 |0 =1 ; 1 |1 =1 ;
(A | B
) 将得到 61,即为 0011 1101
。
^ 异或运算符 异或运算符(xor
),按二进制位进行 异或
运算。运算规则:
1 2 3 4 0 ^0 =0 ; 0 ^1 =1 ; 1 ^0 =1 ; 1 ^1 =0 ;
两个操作数的位中,相同则结果为0,不同则结果为1。
一个数和0异或还是自己,一个数和自己异或是0。
(A ^ B
) 将得到 49,即为 0011 0001
。
~ 取反运算符 取反运算符,按二进制位进行 取反
运算。运算规则:
(~A
) 将得到 -61,即为 1100 0011
,一个有符号二进制数的补码形式。
<< 二进制左移运算符 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位,左边的二进制位丢弃,右边补0。
1 2 A = 0011 1100 B = 0000 1101
A << 2
将得到 240,即为 1111 0000
。
>> 二进制右移运算符 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
1 2 A = 0011 1100 B = 0000 1101
A >> 2
将得到 15,即为 0000 1111
。
实例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <iostream> using namespace std; int main () { unsigned int a = 60 ; unsigned int b = 13 ; int c = 0 ; c = a & b; cout << "Line 1 - c 的值是 " << c << endl ; c = a | b; cout << "Line 2 - c 的值是 " << c << endl ; c = a ^ b; cout << "Line 3 - c 的值是 " << c << endl ; c = ~a; cout << "Line 4 - c 的值是 " << c << endl ; c = a << 2 ; cout << "Line 5 - c 的值是 " << c << endl ; c = a >> 2 ; cout << "Line 6 - c 的值是 " << c << endl ; return 0 ; }
结果:
1 2 3 4 5 6 Line 1 - c 的值是 12 Line 2 - c 的值是 61 Line 3 - c 的值是 49 Line 4 - c 的值是 -61 Line 5 - c 的值是 240 Line 6 - c 的值是 15
赋值运算符 1 2 3 4 5 6 7 8 9 10 11 = C = A + B 将把 A + B 的值赋给 C += C += A 相当于 C = C + A -= C -= A 相当于 C = C - A *= C *= A 相当于 C = C * A /= C /= A 相当于 C = C / A %= C %= A 相当于 C = C % A <<= C <<= 2 等同于 C = C << 2 >>= C >>= 2 等同于 C = C >> 2 &= C &= 2 等同于 C = C & 2 ^= C ^= 2 等同于 C = C ^ 2 |= C |= 2 等同于 C = C | 2
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include <iostream> using namespace std; int main () { int a = 21 ; int c ; c = a; cout << "Line 1 - = 运算符实例,c 的值 = : " <<c<< endl ; c += a; cout << "Line 2 - += 运算符实例,c 的值 = : " <<c<< endl ; c -= a; cout << "Line 3 - -= 运算符实例,c 的值 = : " <<c<< endl ; c *= a; cout << "Line 4 - *= 运算符实例,c 的值 = : " <<c<< endl ; c /= a; cout << "Line 5 - /= 运算符实例,c 的值 = : " <<c<< endl ; c = 200 ; c %= a; cout << "Line 6 - %= 运算符实例,c 的值 = : " <<c<< endl ; c <<= 2 ; cout << "Line 7 - <<= 运算符实例,c 的值 = : " <<c<< endl ; c >>= 2 ; cout << "Line 8 - >>= 运算符实例,c 的值 = : " <<c<< endl ; c &= 2 ; cout << "Line 9 - &= 运算符实例,c 的值 = : " <<c<< endl ; c ^= 2 ; cout << "Line 10 - ^= 运算符实例,c 的值 = : " <<c<< endl ; c |= 2 ; cout << "Line 11 - |= 运算符实例,c 的值 = : " <<c<< endl ; return 0 ; }
结果:
1 2 3 4 5 6 7 8 9 10 11 Line 1 - = 运算符实例,c 的值 = 21 Line 2 - += 运算符实例,c 的值 = 42 Line 3 - -= 运算符实例,c 的值 = 21 Line 4 - *= 运算符实例,c 的值 = 441 Line 5 - /= 运算符实例,c 的值 = 21 Line 6 - %= 运算符实例,c 的值 = 11 Line 7 - <<= 运算符实例,c 的值 = 44 Line 8 - >>= 运算符实例,c 的值 = 11 Line 9 - &= 运算符实例,c 的值 = 2 Line 10 - ^= 运算符实例,c 的值 = 0 Line 11 - |= 运算符实例,c 的值 = 2
杂项运算符
CPP-sizeof运算符 :返回变量的大小。`sizeof(a)` 将返回 4,其中 a 是整数。
如果 Condition 为真 ? 则值为 X : 否则值为 Y。
1 2 3 int x, y = 10 ;x = (y < 10 ) ? 30 : 40 ;
逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> using namespace std; int main () { int i, j; j = 10 ; i = (j++, j+100 , 999 +j); cout << i; return 0 ; }
CPP-成员运算符 :用于引用类、结构和共用体的成员
CPP-强制转换运算符 :把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
返回变量的地址。 &a
; 将给出变量的实际地址。
指向一个变量。 *a
; 将指向一个变量。
-->
并不是一个操作符,实际上它是两个独立的操作符:--
(减号)和 >
(大于号)。
1 2 3 4 5 6 7 while (x --> 0 )while ( (x--) > 0 )while (x-- > 0 )
实例1:
输出 0 到 9 的 整数
1 2 3 4 5 6 7 8 9 #include <stdio.h> int main () { int x = 10 ; while (x --> 0 ) { printf ("%d " , x); } }
输出结果:9 8 7 6 5 4 3 2 1 0
实例2:
输出 大于 0 小于 10 的偶数
1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> int main () { int x = 10 ; while ( 0 <---- x ) { printf ("%d " , x); } }
输出结果:8 6 4 2
实例3:
1 2 3 4 5 6 7 8 9 10 #include <stdio.h> int main () { int x = 100 ; while ( 0 <-------------------- x ) { printf ("%d " , x); } }
输出结果:90 80 70 60 50 40 30 20 10
运算符优先级 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 括号成员是老大; 全体单目排老二; 乘除余三,加减四; 移位五,关系六; 等与不等排行七; 位与异或和位或; "三分天下" 八九十; 逻辑与,逻辑或; 十一十二紧挨着; 条件只比赋值高, 逗号运算最低级!
C++ 运算符