2013-04-04 89 views
3

我需要使用下面的代碼,但我是一般的Ruby和編程新手,不明白這是什麼。有人能告訴我這是什麼或至少是什麼?說明1 << 16 | 10?

def MAKELPARAM(w1, w2) 
    return (w2<<16) | w1 
end 

謝謝!

+0

''<<是位位移運算符,'|'是按位或。 – thejh 2013-04-04 19:58:57

+4

'<<'是左移位,'|'是按位或。現在你可以谷歌:) – 2013-04-04 19:59:22

+1

'w2 * 2^16 + w1' – 2013-04-04 20:06:24

回答

2

這執行w2左移16位,然後按位或w1結果。

+0

謝謝,我不能爲我的生活弄清楚這是如何工作的。如果我輸入MAKELPARAM(10,1),我會得到65546!如果任何人有興趣[這裏](http://www.tutorialspoint.com/ruby/ruby_operators.htm)是一個鏈接到什麼左移,位或者是在紅寶石。 – 2013-04-05 10:36:52

0

首先,它由16個地方向左位位移W2,所以即採取w2 = 1

w2 == 0b1 
w2 << 16 == 0b1000000000000000 

然後它使用bitewise或w1

1

所以這些可能是按位運算符,如果你知道它們是數字,但如果進入的參數是數組然後< <是要添加到數組的運算符。還有,|操作者執行一次或上的兩個陣列的返回是任一陣列
對於實施例中的元素的數組:

w1 =[] 
w2 = [16,13] 
w3 = [13] 
MAKELPARAM(w1,w2) 
#Returns [16,13] 

MAKELPARAM(w1,w3) 
#Returns [16,13] 

MAKELPARAM(w1,w1) 
#Returns [16] 
+0

MAKELPARAM(w1,w1) #退回[16,16] – 2013-04-04 20:14:44

+0

它並不是因爲|或者是兩個列表在一起。試試irb吧。 |在那裏停止輸出列表中的副本。 – Mgrandjean 2013-04-04 21:42:31

+1

這是正確答案 - 表達式的結果取決於類'''w1'''和'''w2'''是實例。 – 2013-04-05 01:01:41

相關問題