簡體   English   中英

紅寶石編程中的按位運算符

[英]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*nn乘以2
  2. >>1將結果除以2使這兩個操作完全冗余,原始代碼為100%等於~(~1<<n)
  3. ~1按位補碼 ,對於0b01則是-0b10 ,即-2
  4. base<<power是兩倍的冪,因此我們有-2^(5+1) = -64
  5. 按位補碼再次產生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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM