【发布时间】:2014-05-25 13:27:10
【问题描述】:
我正在尝试理解一些在 6 到 10 年前编写的又快又脏的 C/C++ 代码。
这个 if 表达式是什么意思?
int s_adr, e_adr, empf_adr;
// ...
if (success == OK &&
(s_adr & 0x1f) == empf_adr &&
(e_adr & 0x20) &&
(s_adr & 0x20)
)
(e_adr & 0x20) 和 ((e_adr & 0x20) == 1) 一样吗?或者我该如何理解?当您非常了解 C 和 C++ 时,我想这可能是一个愚蠢的问题。但我没有。
【问题讨论】:
-
这不是 C++ 代码。在
(e_adr & 0x20)和(s_adr & 0x20)之间至少缺少一个运算符。 -
更像 (e_adr & 0x20) 等价于 ((e_adr & 0x20) !=0)
-
不过,这确实是基本的 C。真 == 非零
-
@wolfgang 抱歉,我删除了 cmets 并杀死了
&&:) -
在优化方面我可能有点邪恶:
(e_adr & s_adr & 0x20)
标签: c++ c boolean boolean-logic