awk和()运算符

Gar*_*ull 3 perl awk

我有一个像这样的awk代码:

val = and($1, 0x03FFFFFF) + $2
Run Code Online (Sandbox Code Playgroud)

我写了这样的Perl版本:

$val = ($1 && 0x03FFFFFF) + $2;
Run Code Online (Sandbox Code Playgroud)

这条线是一样的吗?

DVK*_*DVK 6

不完全 - 你想要一个&,而不是&&:

$val = ($1 & 0x03FFFFFF) + $2; 
Run Code Online (Sandbox Code Playgroud)

请注意,您是正确的,因为优先需要括号


更详细:

  • 你的awk表达式使用的and()gawk manual的ch中定义的." 8.1.6 gawk的位操作功能 "因此:

    和(v1,v2)=======返回v1和v2提供的值的按位AND.

  • 因此,在Perl中你想要一个按位"和" ; 不是合乎逻辑的,根据perldoc perlop是一个单&符:" &"