wai*_*933 9 bit-manipulation bit-shift
我理解按位操作以及它们如何用于不同目的,例如权限.但是,我似乎不明白比特移位运算符的用途.我理解他们是如何工作的,但我想不出任何我可能想要使用它们的场景,除非我想做一些非常快速的乘法或除法.有没有其他理由使用位移?
Guy*_*ton 12
原因有很多,这里有一些:
由于这些和其他原因,大多数处理器具有位移和/或旋转指令以及其他逻辑指令(和/或/ xor/not).
历史上,乘法和除法明显较慢,因为它们是更复杂的操作,而某些CPU根本没有那些.
另见这里: 你有没有必要在实际项目中使用位移?
正如您所指出的,左移与乘以2相同.至少在我们谈论无符号数量的时候.签名数量的"左移"的含义是......语言相关的.
使用现代编译器,写"i = x*2"之间真的没有区别 和"i = x << 1;" 编译器将生成最有效的代码.所以从这个意义上来说,没有理由倾向于倍增.
一些算法通过将数量左移一位然后将低位设置为0或1来工作.一些简单的压缩算法以这种方式工作.例如,如果您的累计值在变量x中,并且当前值(0或1)在y中,那么写"x =(x << 1)| y"更有意义,而不是"x" =(x*2)+ y".都做同样的事情,但首先是更notationally正确.你不必想,"哦,对,乘以2与左移相同."
此外,当你谈论移位的算法时,向左或向右移动特定数量的位比向你想要乘以或除以2的倍数更方便.
因此,对于转移而不是倍增通常没有性能上的好处 - 至少在使用高级语言时不是这样 - 有时候有能力转移使得你正在做的事情更容易被理解.