ruby编程中的按位运算符

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)

Ale*_*kin 8

首先,让我们了解运算符优先级:

# 5 3  4   1   2
  ~(~1<<((2*n)>>1))
Run Code Online (Sandbox Code Playgroud)
  1. 2*nn2
  2. >>1通过2使这两个操作完全冗余来划分结果,原始代码100%等于~(~1<<n)
  3. ~1是一个按位补充,因为0b01它是-0b10,是-2,
  4. base<<power 是一个双倍的力量,因此我们有 -2^(5+1) = -64
  5. 按位补又产生0b0111111出的-0b1000000.