Rik*_*kas 1 ruby binary bit-manipulation bit-shift bitwise-operators
按位运算符很难理解.有人可以详细解释下面的红宝石代码吗?
def res(n)
~(~1<<((2*n)>>1))
end
res(5) --> 63
Run Code Online (Sandbox Code Playgroud)
首先,让我们了解运算符优先级:
# 5 3 4 1 2
~(~1<<((2*n)>>1))
Run Code Online (Sandbox Code Playgroud)
2*n乘n用2>>1通过2使这两个操作完全冗余来划分结果,原始代码100%等于~(~1<<n)~1是一个按位补充,因为0b01它是-0b10,是-2,base<<power 是一个双倍的力量,因此我们有 -2^(5+1) = -640b0111111出的-0b1000000.