【问题标题】:PHP function flags, how?PHP函数标志,如何?
【发布时间】:2011-04-05 02:40:30
【问题描述】:

我正在尝试创建一个以标志作为参数的函数,但输出总是与预期不同:

define("FLAG_A", 1);  
define("FLAG_B", 4);  
define("FLAG_C", 7);  
function test_flags($flags) {  
 if($flags & FLAG_A) echo "A";  
 if($flags & FLAG_B) echo "B";  
 if($flags & FLAG_C) echo "C";   
}  
test_flags(FLAG_B | FLAG_C); # Output is always ABC, not BC  

我该如何解决这个问题?

【问题讨论】:

    标签: php function bit-manipulation flags


    【解决方案1】:

    标志必须是 2 的幂才能正确按位或组合在一起。

    define("FLAG_A", 0x1);
    define("FLAG_B", 0x2);
    define("FLAG_C", 0x4);
    function test_flags($flags) {
      if ($flags & FLAG_A) echo "A";
      if ($flags & FLAG_B) echo "B";
      if ($flags & FLAG_C) echo "C";
    }
    test_flags(FLAG_B | FLAG_C); # Now the output will be BC
    

    对常量值使用十六进制表示法对程序的行为没有影响,但这是向程序员强调这些值构成bit field 的一种惯用方式。另一种是使用轮班:1<<01<<11<<2 等。

    【讨论】:

    • 老兄,您的评论的输出期望不正确。因为输出将始终是其他情况 - BC 而不是 ABC,这是程序的正确行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多