使用'<< 1'代替'*2'有什么好处吗?

Vla*_*ala 6 bit-manipulation

我已经看过几次,但在我看来,使用按位移位会妨碍可读性.为什么用它?它比仅乘2还快吗?

rec*_*ive 22

你在乘法时应该使用*,而在你移位时应该使用<<.它们在数学上是等价的,但具有不同的语义含义.例如,如果要构建标志字段,请使用位移.如果要计算总计,请使用乘法.

  • +1.在您的代码中表达您的**意图**,不要试图再次猜测编译器(除非您已经对代码进行了分析并确定以某种方式执行此操作会对性能产生重大影响). (2认同)

Edi*_*enz 17

在没有通过发出左移指令优化*2调用的旧编译器上更快.这种优化非常容易检测,任何体面的编译器都可以.

如果它影响可读性,则不要使用它.始终首先以最清晰简洁的方式编写代码,然后如果遇到速度问题,请返回并进行配置并进行优化.


Jer*_*ten 6

当您关注正在使用的数据的各个位时,会使用它.例如,如果要将单词的高位字节设置为0x9A,则不会写入

n |= 0x9A * 256
Run Code Online (Sandbox Code Playgroud)

你写的:

n |= 0x9A << 8
Run Code Online (Sandbox Code Playgroud)

这使得您更清楚地使用位而不是它们所代表的数据.