gpt4 book ai didi

php按位标志检测操作

转载 作者:可可西里 更新时间:2023-11-01 01:04:59 25 4
gpt4 key购买 nike

//你好,我想用按位运算排除一个标志,但我不知道如何://这是标志(它们来自文件系统迭代器)

define('CURRENT_AS_FILEINFO', 0);
define('CURRENT_AS_SELF', 16);
define('CURRENT_AS_PATHNAME', 32);
define('CURRENT_MODE_MASK', 240);
define('KEY_AS_PATHNAME', 0);
define('KEY_AS_FILENAME', 256);
define('FOLLOW_SYMLINKS', 512);
define('KEY_MODE_MASK', 3840);
define('NEW_CURRENT_AND_KEY', 256);
define('SKIP_DOTS', 4096);
define('UNIX_PATHS', 8192);

用户可以设置任何标志组合。我需要检测是否设置了 CURRENT_AS_SELF 或 CURRENT_AS_PATHNAME,到目前为止,这是我的功能:

function containsPathnameOrSelfFlag($flags) {
if ($flags & (CURRENT_AS_PATHNAME | CURRENT_AS_SELF)) {
return true;
}
return false;
}

这是一个测试套件:

var_dump(containsPathnameOrSelfFlag(CURRENT_MODE_MASK | CURRENT_AS_PATHNAME)); // true, ok
var_dump(containsPathnameOrSelfFlag(CURRENT_AS_FILEINFO)); // false, ok
var_dump(containsPathnameOrSelfFlag(CURRENT_MODE_MASK | CURRENT_AS_FILEINFO)); // true, but false was expected, because neither CURRENT_AS_SELF nor CURRENT_AS_SELF were set, so my function is wrong

是否可以使用位运算符让函数通过第三种情况(它应该返回 false )?

我在这里看到的问题是 CURRENT_MODE_MASK 的位与 CURRENT_AS_SELF 重叠和 CURRENT_AS_PATHNAME 的位:

0000000000010000 : CURRENT_AS_SELF 
0000000000100000 : CURRENT_AS_PATHNAME
0000000011110000 : CURRENT_MODE_MASK
0000000100000000 : KEY_AS_FILENAME
0000001000000000 : FOLLOW_SYMLINKS
0000111100000000 : KEY_MODE_MASK
0000000100000000 : NEW_CURRENT_AND_KEY
0001000000000000 : SKIP_DOTS
0010000000000000 : UNIX_PATHS

所以每次用户将 CURRENT_MODE_MASK 添加到标志时,我的函数会认为 CURRENT_AS_SELF 和 CURRENT_AS_PATHNAME 也已设置,但事实并非如此。我不知道如何解决这个问题。

最佳答案

掩码旨在针对当前测试值进行运算,而不是与生成的新值进行运算。如果您想测试是否存在或仅使用一个标志,则仅使用该标志。

关于php按位标志检测操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13265448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com