Perl按位运算会产生意外结果

时间:2018-02-10 02:00:27

标签: perl

我正在尝试锻炼子网掩码和邻居IP地址。当使用AND来查找网络ID时,我得到了奇怪的结果。

为什么这不正确,我怎样才能成真呢?

if ( ~252&255 == 3 ) {print "hello\n";}

我也试过,但我有同样的问题

if ( ~252&255 == 0x11 ) {print "hello\n";}

2 个答案:

答案 0 :(得分:10)

这是一个优先问题。

~252&255 == 3

装置

(~252) & (255 == 3)

但你想要

((~252) & 255) == 3

比较运算符(例如==)的优先级高于中缀位运算符(例如&),但Perl选择遵循C的优先级规则,这是不直观的。

  

从C借来的运算符保持相同的优先关系,即使C的优先级稍微有点棘手。 (这使得学习Perl对于C人来说更容易。)

perlop

答案 1 :(得分:2)

Array.prototype