首先,让我们了解运算符优先级:
# 5 3 4 1 2 ~(~1<<((2*n)>>1))
2*n乘n用2
2*n
n
2
>>1通过2使这两个操作完全冗余来划分结果,原始代码100%等于~(~1<
>>1
~(~1<
~1是一个按位补充,因为0b01它是-0b10,是-2,
~1
0b01
-0b10
-2
base< 是一个双倍的力量,因此我们有 -2^(5+1) = -64
-2^(5+1) = -64
按位补又产生0b0111111出的-0b1000000.
0b0111111
-0b1000000