2015-04-03 68 views
0

我已經走得過一個Perl的書,我最近購買的,而閱讀我注意到的是困惑我的代碼塊..

use integer; 
$value = 257; 

while($value){ 
    unshift @digits, (0..9,a..f)[$value & 15]; 
    $value /= 16; 
} 
print digits; 

書中提到的目的是顛倒數字的順序。然而,新的perl我無法弄清楚[$ value & 15]在做什麼。

+0

當我不知道Perl中是什麼意思時,'perldoc'是我看的第一個地方。不幸的是,如果你是一個初學者,你可能不知道'perldoc'中的*哪裏*,所以它可能需要一些挖掘。在這種情況下,我們有一個變量,其次是我們的「神祕符號」,後面跟着一個常量。這看起來像一個操作符,有點像'$ foo + 15'中的'+'。運算符記錄在['perldoc perlop'](http://perldoc.perl.org/perlop.html#Bitwise-And);關於'perldoc'的好處是你可以搜索像'&'這樣的符號,你不能輕易使用谷歌。 *(續)* – ThisSuitIsBlackNot 2015-04-03 20:20:05

+0

*(續)*'&'在'perldoc'中的解釋不是很有用,如果您不知道按位操作,但它確實給出了操作符的名稱(「按位AND 「),我們現在可以通過Google進行更好的解釋。其他常見的地方是'perldoc perlvar'用於關於'$ /','perldoc perlsyn'等關於Perl語法文檔的特殊變量的文檔,'perldoc -f函數'用於關於函數的文檔(例如'perldoc -f sort' )。 – ThisSuitIsBlackNot 2015-04-03 20:21:15

回答

4

這是一個bitwise and操作。

它在做什麼是按位執行並使用15的值,並且$value中包含任何值。

結果值是十進制值,對應於值的位和結果的低4位。

例:

$value = 21 
    which has a binary representation of: 0b10101 

執行bitwise and用15意味着在任何$value位將被清零,如果它們或者外部的低4位範圍,或包含低4位沒有1的。

結果是:

0b10101 
& 
0b 1111 
------- 
0b00101 = 5 

尋找真相表進行按位運算將東西幫助像這樣的未來,但執行時與任何價值,結果是只有真,否則兩個比特都是1,0。

V1 | V2 | V1 & V2 
----------------- 
0 | 0 | 0 
0 | 1 | 0 
1 | 0 | 0 
1 | 1 | 1 
+0

感謝您的幫助。 – 2015-04-03 20:11:29

+2

和'(...)[...]'是一個列表切片,它使用方括號中的內容作爲列表元素的索引以返回 – ysth 2015-04-03 20:18:00