- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图在我工作的公司系统中理解这段代码,但这对我来说没有任何意义。
$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/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!