[英]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))
2*n
將n
乘以2
>>1
將結果除以2
使這兩個操作完全冗余,原始代碼為100%等於~(~1<<n)
~1
是按位補碼 ,對於0b01
則是-0b10
,即-2
, base<<power
是兩倍的冪,因此我們有-2^(5+1) = -64
0b0111111
中的-0b1000000
。 更新編輯。
讓我們盡可能地描述正在發生的事情以及它們在這里的順序。 首先,讓我感謝有關原始表達式冗余的第一個答案。 我從簡單的一開始。
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)
更新編輯:
我只是粘貼在這里的東西。 您可能會踩到那里,然后真正看到發生了什么。
或者,您也可以使用自己的安裝以及repl.it https://repl.it/languages/ruby玩得開心!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.