什么时候应该使用按位运算符?

我阅读了以下堆栈溢出问题,并了解了按位和逻辑之间的差异。

  • PHP中&和&&的区别

  • 参考 - 这个符号在PHP中的含义是什么?

  • 但是,它们中的任何一个都不能解释什么时候应该使用按位或逻辑。

    什么时候应该使用按位运算符而不是逻辑运算符,反之亦然?

    在哪种情况下我需要逐点比较?

    我不是在问这些差异,但是我在问你什么时候需要使用按位运算符。


    按位|&和逻辑||&&完全不同。

    按位运算符对两个数的位执行操作并返回结果。 这意味着这不是一件事,也不是一件事。 如果它们用于条件语句中,它们通常用作逻辑比较的一部分。 例如:

    if ($x & 2 == 2) {
        // The 2^1 bit is set in the number $x
    }
    

    逻辑运算符比较两个(或更多)条件/表达式并返回true或false。 在条件语句中最常用它们,如ifwhile 。 例如:

    if ($either_this || $or_this) {
        // Either expression was true
    }
    

    与其他任何东西一样,Bitwise对PHP中的东西也很有用。

    如何可以同时打开多个状态的值(可能是权限)?

    <?php
    
    # must double them like this for it to work.
    const STATE_FOO = 1;
    const STATE_BAR = 2;
    const STATE_FEZ = 4;
    const STATE_BAZ = 8;
    
    # set state to foo and fez
    $state = STATE_FOO | STATE_FEZ;
    
    echo "What's the value: $staten";
    echo "Is foo state on? ".(bool)($state & STATE_FOO)."n";
    echo "Is bar state on? ".(bool)($state & STATE_BAR)."n";
    echo "Is fez state on? ".(bool)($state & STATE_FEZ)."n";
    echo "Is baz state on? ".(bool)($state & STATE_BAZ)."n";
    echo "Is foo and fez state on? ".($state == (STATE_FOO | STATE_FEZ))."n";
    

    在大多数情况下,您可能会想要使用逻辑运算符。 它们用于组合逻辑条件,通常用于控制程序流程,例如($isAlive && $wantsToEat)

    当您希望在整数的基础二进制表示中逐位执行操作时,使用位运算符。 例如(5 & 3) == 7 。 正如其他人所建议的那样,在那些倾向于使用PHP编写的应用程序中,通常没有太多要求(尽管存在低级语言,如C)。

    链接地址: http://www.djcxy.com/p/1705.html

    上一篇: When should I use a bitwise operator?

    下一篇: What does & in &2 mean in PHP?