aru*_*run 6 c bit-manipulation
我最近通过Peter Van Der Linden查看了Expert C编程,并发现了+ =运算符的这种用法:
"如果您有一个复杂的数组引用,并且您想要证明两个引用都使用相同的索引,那么:
node[i >> 3] += ~(0x01 << (i & 0x7));
Run Code Online (Sandbox Code Playgroud)
是要走的路."
尽管我已经尝试过,但我无法弄清楚这段代码.我希望这里有人可以解释实际发生的事情以及为什么可以用来证明使用相同的索引?
我对引言的解释是
node[COMPLICATED_EXPRESSION] += STUFF;
Run Code Online (Sandbox Code Playgroud)
比较好
node[COMPLICATED_EXPRESSION] = node[COMPLICATED_EXPRESSION] + STUFF;
Run Code Online (Sandbox Code Playgroud)
因为一眼就能看出意图是什么.
更重要的是,如果STUFF也很复杂,因为这使整体表达更难以一目了然地解析.
在这本书中,van der Linden解释了他展示的代码来自何处:
我们直接从操作系统中的一些代码中获取此示例语句.只更改了数据名称以保护有罪.