鸟哥的c++入门课(9)--运算符

运算符是对变量和常量进行某种操作的符号。

比如, 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
&& 
aba && b
true true true
true false false
false true false
false false false
|| 
aba || 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
原文地址:https://www.cnblogs.com/niao-ge/p/12040994.html