运算符是对变量和常量进行某种操作的符号。
比如, r = i + j; 这一句中,+ 是加法运算符,=是赋值运算符
下面列出c++中常用的运算符
赋值运算符
运算符 | 名称 | 例句 | 例句说明 |
= | 赋值 | x=9 | 将x的值设置为9 |
算术运算符
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取模 |
加、减、乘、除的运算规则和数学上是一致的;取模的运算结果是两个操作数相除后的余数。
可以用下面的代码可练习下算术运算符的使用。
1 #include <iostream> 2 int main() { 3 std::cout << "1+2=" << 1+2<<std::endl; 4 std::cout << "11-2=" << 11 -2 << std::endl; 5 std::cout << "9*9=" << 9*9 << std::endl; 6 std::cout << "99/3=" << 99/3 << std::endl; 7 std::cout << "7%2=" << 7%2<< std::endl; 8 std::cout << "end"<<std::endl; 9 }
运行结果:
递增递减运算符
++ | 递增 |
-- | 递减 |
递增递减运算符可以放在变量的前面,如x++;也可以放在变量的后面,如++x
前置或后置的区别,请直接看代码
1 int main() { 2 int x = 1; 3 int y = x++; 4 std::cout << "x=1,y = x++之后,x=" << x << ",y=" << y << std::endl; 5 6 y = ++x; 7 std::cout << "x=2,y = ++x之后,x=" << x << ",y=" << y<<std::endl ; 8 }
运行
比较运算符
== | 相等 | a==b | 如果a等于b,则表达式的值是true,否则是false |
!= | 不等 | a!=b | 如果a不等于b,则表达式的值是true,否则是false |
< | 小于 | a<b | 如果a小于b,则表达式的值是true,否则是false |
> | 大于 | a>b | |
<= | 小于等于 | a<=b | |
>= | 大于等于 | a>=b |
1 #include <iostream> 2 int main() { 3 int a = 1; 4 int b = 2; 5 bool b1 = b == b,b2=a>b,b3=a<=b,b4=2<=b; 6 std::cout << std::boolalpha;//这句的作用是把bool值输出为true或false,而不是0或1 7 std::cout << "a==b的结果是" << b1<< std::endl; 8 std::cout << "a>b的结果是" << b2 << std::endl; 9 std::cout << "a<=b的结果是" << b3<< std::endl; 10 std::cout << "2<=b的结果是" <<b4<< std::endl; 11 return 0; 12 }
运行结果
逻辑运算符
! | 非 |
&& | 与 |
|| | 或 |
! | |
a | !a |
true | false |
false | true |
&& | ||
---|---|---|
a | b | a && b |
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
|| | ||
---|---|---|
a | b | a || b |
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
计算机在使用逻辑运算符进行运算的时候,遵循短路规则。即计算机只会计算得出结果所必需的的计算,而忽略剩余的计算。
比如 (1==2)&&(a==b) ,计算机计算1==2后发现其结果是false,这是不管a==b的结果是什么,整个表达式的结果都是false,所以就不会计算a==b。
短路规则
&&:如果其左侧的表达式结果是false,整个表达式的结果就是false,而不会对&&右侧的表达式求值。
||:如果其左侧的表达式结果是true,整个表达式的救国就是true,二不会对||右侧的表达式求值。
条件运算符
其基本形式是: 条件?结果1:结果2 。如果“条件”的结果为true,则执行“结果1”;如果“条件”的结果为false,则执行“结果2”
示例代码
1 int main() { 2 int a, b, c; 3 4 a = 1; 5 b = 2; 6 c = (a > b) ? a : b; 7 8 std::cout << c << std::endl; 9 }
这行结果
位运算符
& |
桉位与 | 当两个操作数的对应位都为1时结果的对应位为1,否则为0 |
| |
按位或 | 当两个操作数的对应位任意一个为1时结果的对应位为1,否则为0 |
^ |
异或 | 当两个操作数的对应位不同时结果的对应位为1,否则为0 |
~ |
按位取反 | 一元运算符,结果为操作数的每一位取反 |
<< |
左移 | 左侧操作数的每一位向左移动右侧操作数指定的位数,右边补0 |
>> |
右移 | 左侧操作数的每一位向右移动右侧操作数指定的位数,左边补0 |
位运算符是以二进制位(bit)位运算单位进行运算的。假设 p和q分别是运算数中的任意两位,则真值表如下:
p | q | ~p | p&q | p|q | p^q |
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 |
示例代码
1 #include <iostream> 2 #include <bitset> 3 int main() { 4 int a=0b0011, b=0b1001, c=0; 5 std::cout << " a=" << std::bitset<sizeof(int) * 8>(a) << std::endl;//使用std::bitset是为了将整数输出为二进制格式
6 std::cout << " b=" << std::bitset<sizeof(int) * 8>(b) << std::endl; 7 std::cout << "a&b=" << std::bitset<sizeof(int) * 8>(a & b) << std::endl; 8 std::cout << "a|b=" << std::bitset<sizeof(int) * 8>(a | b) << std::endl; 9 std::cout << "a^b=" << std::bitset<sizeof(int) * 8>(a ^ b) << std::endl; 10 std::cout << " ~a=" << std::bitset<sizeof(int) * 8>(~a) << std::endl; 11 return 0; 12 }
运行结果
复合赋值运算符
+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=
表达式 | 等价于 |
a+=b | a=a+b |
a-=b | a=a-b |
a*=b | a=a*b |
a/=b | a=a/b |
a%=b | a=a%b |
a>>=b | a=a>>b |
a<<=b | a=a<<b |
a&=b | a=a&b |
a^=b | a=a^b |
a|=b | a=a|b |