gpt4 book ai didi

php - php if 代码背后的逻辑

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:51 25 4
gpt4 key购买 nike

我试图在我工作的公司系统中理解这段代码,但这对我来说没有任何意义。

$k = 48;

if (($k & 2) > 0) {

echo "2 is true";
}

echo "<br />";
if (($k & 4) > 0) {
echo "4 is true";
}

echo "<br />";
if (($k & 8) > 0) {
echo "8 is true";
}
echo "<br />";
if (($k & 16) > 0) {
echo "16 is true";
}
echo "<br />";
if (($k & 32) > 0) {
echo "32 is true";
}

当 $k 为 10 或 11 时,2 和 8 都为真。

当 $k 为 12 或 13 时,4 和 8 都为真。

请帮我解决这个问题

最佳答案

此代码只是检查某些位位置是否设置为某个值 $k。看看如何bitwise airthmetic有效。

在您发送给我们的代码中,它没有太多上下文。但是,这是检查位掩码中值的典型模式。

但是,一般来说,> 0 是不必要的(因为任何 !0 通常 == true)。

重要的是要注意,当我说位位置时,我指的是二进制数。也就是说,$k & 32 不检查第 32 位,而是检查第 6 个最高有效位 (32d == 0b100000)。

简短示例

考虑最后一个陈述。我们已经确定十进制的 32 在二进制中看起来像 100000。现在假设我们要检查某个数字 33 中是否设置了第 6 位。33 在二进制中表示为 0b100001。现在我们采用按位和,它的工作方式很像我们习惯以 10 为基数(即十进制)看到的乘法。

0b100000 <--- decimal 32
&
0b100001 <--- decimal 33
--------
0b100000 <--- Result is > 0 and, therefore, this value has the 6th bit set

现在,让我们用不同的数字重试这个例子。十进制 15 怎么样。

0b100000 <--- decimal 32
&
0b001111 <--- decimal 15
--------
0b000000 <--- Result == 0 and, therefore, the 6th bit is not set

现在,这个 &(不要与表示为 &&logical and 混淆)也适用于多个位。假设您想检查位 6 和位 4,那么您会想使用 0b101000(十进制 40),但这取决于您要测试的内容(即正是那些位或只是其中一位),您的条件可能会改变。

再多一点从风格的角度来看,重要的是要注意这些掩码通常以十六进制而不是十进制表示(或二进制,因为那样会很麻烦)。这主要是因为在“一目了然”地查看十进制数时,它有点不清楚它与什么二进制表示相关。让我们再次考虑十进制的 32。在十六进制中,二进制数可以通过简单地将位按 4(从右到左)分组来表示为十六进制数。见下文

0b100000 <--- decimal 32
0000 === 0x0 (hexadecimal 0)
10 === 0b0010 (implied leading 0's) === 0x2 (hexadecimal 2)
--------
0x20

如您所见,十六进制 20 是十进制 32 是二进制 100000。

关于php - php if 代码背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143667/

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