【问题标题】:Perl bitwise operation gives unexpected resultsPerl 按位运算给出了意想不到的结果
【发布时间】:2018-09-20 04:48:41
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: perl


【解决方案1】:

这是一个优先级问题。

~252&255 == 3

意思

(~252) & (255 == 3)

但你想要

((~252) & 255) == 3

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

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

perlop

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我明白了。我会试试这个。
    猜你喜欢
    • 2021-08-29
    • 2018-10-28
    • 2019-05-19
    • 2017-01-05
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2021-12-17
    相关资源
    最近更新 更多