0. 基本性质
0.1 交换律
相同运算符下可任意交换,不同的运算符不可交换
0.2 结合律
相同运算符是可结合的
0.3 分配律
(
a
&
b
)
∣
c
=
(
a
∣
c
)
&
(
b
∣
c
)
(a \& b) | c = (a | c) \& (b | c)
(a&b)∣c=(a∣c)&(b∣c)
(
a
∣
b
)
&
c
=
(
a
&
c
)
∣
(
b
&
c
)
(a | b) \& c = (a \& c) | (b \& c)
(a∣b)&c=(a&c)∣(b&c)
(
a
^
b
)
&
c
=
(
a
&
c
)
^
(
b
&
c
)
(a \ \hat{} \ b) \& c = (a \& c) \ \hat{} \ (b \& c)
(a ^ b)&c=(a&c) ^ (b&c)
其余三式不满足
1. and or 的不等式性质
a
⩾
a
&
b
a
⩽
a
∣
b
a \geqslant a \& b \\ a \leqslant a | b
a⩾a&ba⩽a∣b
Formally:
a
1
&
a
2
&
.
.
.
&
a
k
⩾
a
1
&
a
2
&
.
.
.
&
a
n
(
k
⩽
n
)
a
1
∣
a
2
∣
.
.
.
∣
a
k
⩽
a
1
∣
a
2
∣
.
.
.
∣
a
n
(
k
⩽
n
)
a_1 \&a_2\&...\&a_k \geqslant a_1 \&a_2\&...\&a_n \ \ \ (k\leqslant n) \\a_1 |a_2|...|a_k \leqslant a_1 |a_2|...|a_n \ \ \ (k\leqslant n)
a1&a2&...&ak⩾a1&a2&...&an (k⩽n)a1∣a2∣...∣ak⩽a1∣a2∣...∣an (k⩽n)
2. Xor 的不等式性质
我们知道异或就是模拟加法, 它与加法唯一不同就是不进位 So:
a
x
o
r
b
⩽
a
+
b
a xor b \leqslant a + b
axorb⩽a+b
3. 大写字母转小写字母
c |= 32;
大小写字母相差32位,正好是2的整次幂,只有最高位是1其余全是0。
其二进制表示为 10 0000
。
上式会将c中的第6位变为1,而所有大写字母二进制表示在第6位都是0, 所以上式相当于 c += 32
。
4. 小写字母转大写字母
c ^= 32
这和上一个同理,这里就不再赘述,留给聪明的读者思考吧。
5.
x
⨁
y
=
z
x \bigoplus y = z
x⨁y=z is equivalent to
x
⨁
z
=
y
x \bigoplus z = y
x⨁z=y
because:
1
⨁
1
=
0
,
1
⨁
0
=
1
1 \bigoplus 1 = 0,1 \bigoplus 0 = 1
1⨁1=0,1⨁0=1
0
⨁
1
=
1
,
0
⨁
1
=
1
0 \bigoplus 1 = 1,0 \bigoplus 1 = 1
0⨁1=1,0⨁1=1
0
⨁
0
=
0
,
0
⨁
0
=
0
0 \bigoplus 0 = 0,0 \bigoplus 0= 0
0⨁0=0,0⨁0=0
6. 判断是否2的整次幂
if(!(n & n - 1))