目录
技巧:单算移关与,异或逻条赋,逗号运算符(从左到右,运算符优先级递减)
1.1单(单目运算符)
++(自加1) --(自减1) &(取地址) *(取地址中的内容) +(正) -(负) !(取反) ~(按位取反)
1.2算(算术运算符)
+ - * / %
1.3移(移位运算符)
<< 左移运算(bit)
>> 右移运算(bit)
eg:
1<<3 = 8 //左移相当于乘以2^n
5<<3 = 5*2^3=40
8>>3 =8 /2^3 = 1 //右移相当于除以2^n
10>>3 = 0b1010 >> 3= 0b1 =1
1.4关(关系运算符)
> 大于
< 小于
== 等于(两个等号,一个等号是赋值)
!= 不等于
>= 大于等于
<= 小于等于
1.5与(与运算符)
& :按照bit位与,0和任何说相与都为0,1和任何数相与都为任何数
0 & 0 = 0
0 & 1 = 0
1 & 1 = 1
eg1:
5&10 = 0b0101 &0b1010 = 0
7&23 = 0b0 0111 & 0b1 0111= 0b0 0111=7
1.6异(异或运算符)
^ :按照bit位异或,相同位假,相异为真
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 1 = 0
eg1:
17 ^ 13 = 0b1 0001 ^ 0b0 1101 = 0b1 1100 = 28
1.7或(或运算符)
|:按照bit位或,1和任何说相或都为1,0和任何数相或都为任何数
0 | 0 = 0
0 | 1 = 1
1 | 1 = 1
eg1:
请将a的bit3位置位,不改变其他的bit位,使用或符号完成
int a;
a |= (1<<3);
eg2:
5 | 10 = 15
问:如果一个int负数和unsigned int的数或运算之后是正数还是负数?
答:正数
1.8逻(逻辑运算符)
|| 或
&& 与
if(表达式1 || 表达式2)
如果表达式1为真,表达式2不会参与运算,整个表达式的结果为真
如果表达式1为假,表达式2会参与运算,如果表达式2为真,整个表达式为真,否则整个表达式为假
if(表达式1&& 表达式2)
如果表达式1为假,表达式2不会参与运算,整个表达式的结果为假
如果表达式1为真,表达式2会参与运算,如果表达式2为真,整个表达式为真,否则整个表达式为假
1.9条(条件运算符,三目运算符)
表达式?表达式1:表达式2;
如果表达式为真,执行表达式1,如果表达式为假,执行表达式2
1.10.赋(赋值运算符)
=
+= //a+=b a=a+b
-=
*=
/=
%=
<<=
>>=
|=
^=
&=
1.11逗(逗号运算符)
a=(表达式1,表达式2,表达式3)
整个表达式的结果就是表达式3的结果
eg1:
a=(3,4,5); //结果a=5
eg2:
a=(b+=c,c+=d,d+=8); //a的结果就是d+=8后的值,但是前两个表达式也会参与运算