我有一个像这样的awk代码:
val = and($1, 0x03FFFFFF) + $2
我写了这样的Perl版本:
$val = ($1 && 0x03FFFFFF) + $2;
这条线是否相同?
答案 0 :(得分:6)
不完全 - 你想要一个&
,而不是&&
:
$val = ($1 & 0x03FFFFFF) + $2;
请注意,parenthesis are needed due to precedence
是正确的更详细:
您的 awk 表达式使用and()
中定义的&
。 “ 8.1.6 gawk的位操作功能”因此:
和(v1,v2)=======返回v1和v2提供的值的按位AND。
因此,在Perl中你需要一个按位“和”;不是合乎逻辑的,根据gawk manual是单个&符号:“{{1}}”