gpt4 book ai didi

c++ - 为什么在 '+' 非常好时使用 '|' 运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:44 25 4
gpt4 key购买 nike

这更像是一个哲学问题,但我已经在代码库中看到过很多次了,但我并不真正理解这种编程方法是如何形成的。

假设您必须在不更改 uint 中的其他值的情况下将位 2 和位 3 设置为某个值 x。这样做是非常微不足道的,也是一项常见的任务,我倾向于这样做:

uint8_t someval = 0xFF; //some random previous value
uint8_t x = 0x2; //some random value to assign.
someval = (somval & ~0xC) | (x << 2); //Set the value to 0x2 for bits 2-3

我看到过使用“|”代替或使用“|”的代码使用“+”:

uint8_t someval = 0xFF; //some random previous value
uint8_t x = 0x2; //some random value to assign.
someval = (somval & ~0xC) + (x << 2); //Set the value to 0x2 for bits 2-3

它们是等价的吗?
是的。

一个比另一个好吗?
仅当您的硬件没有按位或指令时,但我从未见过没有按位或指令的处理器(即使是小型 PIC10 处理器也有或指令)。

那么为什么有些程序员倾向于使用“+”而不是“|”呢?我在这里是否遗漏了一些非常明显、 super 强大的优化?

最佳答案

  • 如果要执行位运算,请使用位运算符。

  • 如果要执行算术运算,请使用算术运算符。

的确,对于某些值,某些算术运算可以作为简单的按位运算来实现,但这本质上是一个实现细节,您永远不应向读者公开这些细节。首先也是最重要的是,代码的逻辑 应该清晰明了,如果可能的话,不言自明。编译器会为你选择合适的低级操作来实现你的愿望。

那是慈善。

关于c++ - 为什么在 '+' 非常好时使用 '|' 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12076822/

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