我已經走得過一個Perl的書,我最近購買的,而閱讀我注意到的是困惑我的代碼塊..
use integer;
$value = 257;
while($value){
unshift @digits, (0..9,a..f)[$value & 15];
$value /= 16;
}
print digits;
書中提到的目的是顛倒數字的順序。然而,新的perl我無法弄清楚[$ value & 15]在做什麼。
我已經走得過一個Perl的書,我最近購買的,而閱讀我注意到的是困惑我的代碼塊..
use integer;
$value = 257;
while($value){
unshift @digits, (0..9,a..f)[$value & 15];
$value /= 16;
}
print digits;
書中提到的目的是顛倒數字的順序。然而,新的perl我無法弄清楚[$ value & 15]在做什麼。
這是一個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
感謝您的幫助。 – 2015-04-03 20:11:29
和'(...)[...]'是一個列表切片,它使用方括號中的內容作爲列表元素的索引以返回 – ysth 2015-04-03 20:18:00
當我不知道Perl中是什麼意思時,'perldoc'是我看的第一個地方。不幸的是,如果你是一個初學者,你可能不知道'perldoc'中的*哪裏*,所以它可能需要一些挖掘。在這種情況下,我們有一個變量,其次是我們的「神祕符號」,後面跟着一個常量。這看起來像一個操作符,有點像'$ foo + 15'中的'+'。運算符記錄在['perldoc perlop'](http://perldoc.perl.org/perlop.html#Bitwise-And);關於'perldoc'的好處是你可以搜索像'&'這樣的符號,你不能輕易使用谷歌。 *(續)* – ThisSuitIsBlackNot 2015-04-03 20:20:05
*(續)*'&'在'perldoc'中的解釋不是很有用,如果您不知道按位操作,但它確實給出了操作符的名稱(「按位AND 「),我們現在可以通過Google進行更好的解釋。其他常見的地方是'perldoc perlvar'用於關於'$ /','perldoc perlsyn'等關於Perl語法文檔的特殊變量的文檔,'perldoc -f函數'用於關於函數的文檔(例如'perldoc -f sort' )。 – ThisSuitIsBlackNot 2015-04-03 20:21:15