我正在编写一个perl实现的协议,其规范是针对C / C ++提供的,但我不太了解C。
条件if ((flags & 0x400) != 0)
是什么意思?我如何在perl中做到这一点?
if ($flags == "\x400")
是否正确?
答案 0 :(得分:6)
&
是一个按位AND。请参阅Bitwise operators。
因此,flags
被视为一系列位,然后您将其与具有您想要检查的位集的东西进行对比。如果结果为非零,则设置该位,否则未设置您正在查看的位。特别是,在您的示例中,0x400 = 0100 0000 0000
用于检查flags
中是否将第11位设置为(1)。
通常,您不会使用0x400
而是使用命名常量,因此很清楚该位代表什么。
所以if ($flags == "\x400")
不正确。请参阅Working with bits in Perl。
可以在Linux file permissions中看到位掩码的常见示例。
答案 1 :(得分:4)
答案 2 :(得分:3)
&
运算符执行按位AND。在您的情况下,if ((flags & 0x400) != 0)
会检查flags
变量的第11位是否未设置为0. You can do bitwise operations in Perl, too。
答案 3 :(得分:2)
答案 4 :(得分:2)
&
是按位和运算符,基本上这是一个测试,以查看flags
中是否设置了特定位。请参阅此处的perl等效项:http://perldoc.perl.org/perlop.html#Bitwise-And