2014-03-31 42 views
-2

有人可以解释我这个简短的珍珠代码吗?我不明白这个小Perl代码(如果...)

$batstr2 = "empty" if($status2 & 4); 

什么说if语句?

+1

哪个*部分*不被理解?尾部''IF'或'..'($ status2&4)位?在标题中包含细化*特定*问题的细节。 – user2864740

+0

'$ batstr2 =($ status2&4)&&“空”',差不多。 :) –

+0

@mpapec,这是不同的。也许你的意思是'$ batstr2 = $ status2&4? “空”:$ batstr2;'(这大致相当)。 – ikegami

回答

1

这是一个按位和 - http://perldoc.perl.org/perlop.html#Bitwise-And。 $ status2被用作位掩码,如果该位被设置,它将$ batstr2设置为'空'。

+0

好的......当我明白它是正确的:$ status = 5比$ batstr2 =“空”......对吗? – DemonDragon

+0

是= 5是00000101和4是00000100,按位和两个是00000100(4)或true导致设置为'空'。 – Oesor

2

这是使用if作为语句修饰符。这是大致相同

if ($status & 4) { 
    $batstr2 = "empty"; 
} 

和完全一样

($status & 4) and ($batstr2 = "empty"); 

各种结构的可作为语句修饰,其中包括:if, unless, while, until, for, when。这些修饰符不能叠加(foo() if $bar for @baz将不起作用),每个简单语句对于一个修饰符都是有限的。

0

如果设置了$ status2的第3个最低有效位,它将$ batstr2设置为“空” - 这是一个逻辑AND掩码。

3

已经回答了很多次,对于情况下,如果你不知道什么是按位与,这里是一个小例子:

perl -e 'print "dec\t  bin\t&4\n";printf "%d\t%8b\t%-8b\n", $_, $_, ($_ & 4) for (0..8);' 

打印:

dec  bin &4 
0   0 0  
1   1 0  
2   10 0  
3   11 0  
4  100 100  
5  101 100  
6  110 100  
7  111 100  
8  1000 0  

,你可以看到,当右边的3rb位为1时 - $num & 4为真。

相关问题