ruby 编程中的位运算符

Bitwise operators in ruby programming

位运算符很难理解。有人可以详细解释下面的 ruby 代码吗?

 def res(n)
 ~(~1<<((2*n)>>1))
 end

 res(5) --> 63

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

# 5 3  4   1   2
  ~(~1<<((2*n)>>1))
  1. 2*n 乘以 n 乘以 2
  2. >>1将结果除以2使得这两个操作完全多余,原码100%等于~(~1<<n)
  3. ~1bitwise complement,对于0b01-0b10,也就是-2
  4. base<<power 是两倍的幂,因此我们有 -2^(5+1) = -64
  5. 按位补码再次从 -0b1000000 中产生 0b0111111

更新编辑。

让我们尽可能详细地描述正在发生的事情以及它们在这里的顺序。 首先让我相信第一个关于原件冗余的答案 表达。我从简单的开始。

def bitwise_complement_bits(args)
  ~ args
end

def bitwise_shift_left(o, n)
  o << n
end

a = bitwise_complement_bits(1)
b = bitwise_shift_left(a, 5)
p bitwise_complement_bits(b)

更新编辑:

Here's a nifty site for some quick evaluation of code.

我只是粘贴了我们这里的内容。您可以在那里通过它,真正看到发生了什么。

或者您可以使用自己的安装以及 repl.it https://repl.it/languages/ruby 玩得开心!