我正在写一个协议的perl实现,它的规范是针对C/C++给出的,但是我不太了解C.C&C++中的'&'是什么,它在perl中的等价操作符是什么?
条件if ((flags & 0x400) != 0)
是什么意思?我如何在Perl中做到这一点?
是if ($flags == "\x400")
是否正确?
我正在写一个协议的perl实现,它的规范是针对C/C++给出的,但是我不太了解C.C&C++中的'&'是什么,它在perl中的等价操作符是什么?
条件if ((flags & 0x400) != 0)
是什么意思?我如何在Perl中做到这一点?
是if ($flags == "\x400")
是否正确?
&
是一个按位与。见Bitwise operators。
所以flags
被视为一系列的位,然后你把它与一些准确设置你想检查的位进行比较。如果结果不为零,则设置该位,否则未设置您正在查看的位。特别是在你的例子中,0x400 = 0100 0000 0000
被用于检查flags
中的第11位是否被设置为1。
通常情况下,您不会使用0x400
,而是使用命名常量,因此它很清楚该位表示什么。因此if ($flags == "\x400")
是不正确的。请参阅Working with bits in Perl。
位掩码的一个常见示例可以在Linux file permissions中看到。
这是bitwise AND.在Perl中,the operator is "&" as well。
&
是按位和运算符,基本上这是一个测试,看看是否在flags
中设置了特定位。请参阅此处的perl等效项:http://perldoc.perl.org/perlop.html#Bitwise-And
的&
运算符执行按位与。在你的情况下,if ((flags & 0x400) != 0)
检查flags
变量的第11位是否未设置为0. You can do bitwise operations in Perl, too。
将链接更改为perldoc。 – nes1983