gpt4 book ai didi

c++ - (b&(1<> i) & 1) C++

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:10 25 4
gpt4 key购买 nike

通常需要将数据类型表示为位序列,并在整个长度的循环中获取它们。虽然我找到((b >> i) & 1)比较直观,最近看到一本书用(b&(1<<i)) .其中哪一项更有利或更有效?如果是,为什么?

最佳答案

假设您使用它来测试一点(因此结果的差异无关紧要),它取决于上下文以及编译器对其执行的操作以及其他因素。

例如,当使用 GCC 7.3 为现代 x86 编译时,它们是 exactly the same ,两者都可以编译成这个序列:

sarx eax, edi, esi
and eax, 1

当使用结果实际做出决定(而不是具体化 bool 值)时,代码仍然是相同的。显然,如果代码是一样的,那么效率上就不会有差异。 Clang 喜欢使用 btsetc (或在适当的时候在 cmov 或控制流中使用标志),但也对两个片段执行相同的操作。 MSVC 确实以不同的方式编译片段,并且可能“更喜欢”1 << i某种意义上的表述。

实现 b & (1 << i) 字面上(我没有观察到任何编译器实际上这样做)需要一条额外的指令来将常量 1 加载到寄存器中,尽管这并不一定意味着它会花费额外的时间(尽管它可以):创建1 独立于其他所有内容,因此它有可能先于其他所有内容执行,然后移位独立于 b所以它可以在 i 之后执行准备就绪但在 b 之前是。

关于c++ - (b&(1<<i)) VS ((b >> i) & 1) C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com