Perl按位操作会产生意外的结果
我正在尝试计算子网掩码和邻居IP地址。当使用AND查找网络ID时,我会得到奇怪的结果 为什么这不是真的,我怎样才能使它成为真的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);
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