Bit*_*lue 2 c c++ boolean-logic boolean
我试图理解一些像6 - 10年前那样快速而肮脏的 C/C++代码.
这个if-expression是什么意思?
int s_adr, e_adr, empf_adr;
// ...
if (success == OK &&
(s_adr & 0x1f) == empf_adr &&
(e_adr & 0x20) &&
(s_adr & 0x20)
)
Run Code Online (Sandbox Code Playgroud)
是(e_adr & 0x20)一样的((e_adr & 0x20) == 1)吗?或者我该如何理解?我想当你非常了解C和C++时,这可能是一个愚蠢的问题.但我没有.
没有这两个条件不一样.(e_adr & 0x20)与此相同(e_adr & 0x20) != 0(事实上,如果此表达式的值不为零,则它只能是0x20).实际上,这检查第6个最低有效位e_adr是否为非零.
这&是一个位操作,其中&&一个布尔操作.
例如,以下是显而易见的;
if (a && b) ...
Run Code Online (Sandbox Code Playgroud)
但是,以下情况不是:
int a=1;
int b=2;
if (a & b) ...
if (a && b) ...
Run Code Online (Sandbox Code Playgroud)
这两个if检查会给出不同的结果.C中的布尔运算假设false是0和true除了之外的任何东西0.因此,&&上面代码中的布尔运算将导致true.
&然而,位操作是两个参数的按位AND.二进制1是0001,二进制2是0010.按位AND执行以下操作
0001
AND 0010
----
0000
Run Code Online (Sandbox Code Playgroud)
每个数字都进行AND运算以产生结果.
|0001和0010的按位OR()将导致0011.
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |