我一直在浏览我最近购买的一本perl书,在阅读时我注意到一段让我困惑的代码..
use integer;
$value = 257;
while($value){
unshift @digits, (0..9,a..f)[$value & 15];
$value /= 16;
}
print digits;
书中提到的目的是扭转数字的顺序。然而,新的perl我无法弄清楚[$ value& amp; 15]正在做。
答案 0 :(得分:4)
这是bitwise and操作。
它正在做的是按位执行并使用值15以及$value
中包含的任何值。
结果值是十进制值,对应于按位的结果和值的低4位。
前:
$value = 21
which has a binary representation of: 0b10101
执行带有15的bitwise and
意味着$value
中的任何位如果在低4位范围之外,或者在低4位中不包含1,则将归零。
结果是:
0b10101
&
0b 1111
-------
0b00101 = 5
查找用于执行按位运算的真值表将有助于将来这样的事情,但是当使用任何值执行AND时,结果是仅为真,当两个位都为1时,否则为0。
V1 | V2 | V1 & V2
-----------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1