Jeffrey Stedfast 出价 several functions that calculates the nearest power of 2 .其中一个函数的代码如下:
static uint32_t
nearest_pow (uint32_t num)
{
uint32_t j, k;
(j = num & 0xFFFF0000) || (j = num); // What is this?
...
}
为了完全理解代码,我尝试将行更改为:
j = num & 0xFFFF0000;
j = j | (j = num);
一不小心,我得到了正确的结果。但是,当我将这种转换应用于下一行(不包括在我的报价中)时,我得到了错误的结果。原来是我理解错了代码的意思。
(j = num & 0xFFFF0000) || 是什么意思(j = num);
?
实际上,我需要将函数转换为其他编程语言。
最佳答案
||
是逻辑或运算符。它具有短路行为,如果左侧为真,则不评估右侧(因为逻辑 or 的结果已经从真正的左侧已知为真)。
在这种情况下,如果第一个赋值 j = num & 0xFFFF0000
为零(“false” ).因此,首先将num
的高两个字节(掩码0xFFFF0000
)分配给j
。如果这是零(“假”),即高两个字节没有任何 1 位,则将 num
分配给 j
。
实际上,这意味着“如果 num
的高两个字节非零,则将其分配给 j
,否则将较低的分配给 j
两个字节的 num
”。
关于c - 这段C代码是什么意思? [短路评估],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232490/