Perl按位操作会产生意外的结果

Perl按位操作会产生意外的结果,perl,Perl,我正在尝试计算子网掩码和邻居IP地址。当使用AND查找网络ID时,我会得到奇怪的结果 为什么这不是真的,我怎样才能使它成为真的 if ( ~252&255 == 3 ) {print "hello\n";} 我也试过,但我也有同样的问题 if ( ~252&255 == 0x11 ) {print "hello\n";} dsm@local:~$perl-le'打印(~252&255==3);' 0 dsm@local:~$perl-le'打印((~252&255)==3);

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

为什么这不是真的,我怎样才能使它成为真的

if ( ~252&255 == 3 ) {print "hello\n";}
我也试过,但我也有同样的问题

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

dsm@local:~$perl-le'打印(~252&255==3);'
0
dsm@local:~$perl-le'打印((~252&255)==3);'
1.

dsm@local:~$

这是一个优先问题

~252&255 == 3
意味着

但是你想要

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

从C中借用的运算符彼此之间保持相同的优先级关系,即使C的优先级有点扭曲。(这使C语言的人更容易学习Perl。)


@user202729你是说它应该工作吗?我明白了。我试试这个。
((~252) & 255) == 3