![]() |
1
11
原因有很多,以下是:
由于这些和其他原因,大多数处理器都有位移位和/或旋转指令以及其他逻辑指令(和/或/xor/not)。 从历史上看,乘法和除法的速度明显较慢,因为它们是更复杂的操作,而一些CPU根本没有这些操作。 这里也看到: Have you ever had to use bit shifting in real projects? |
![]() |
2
6
正如你所指出的,左移位和乘二是一样的。至少在我们讨论无符号数量的时候。有符号数量的“左移位”的意思是…语言依赖。 在现代编译器中,编写“i=x*2”;和“i=x<<1”;编译器将生成最有效的代码。所以在这个意义上,没有理由更喜欢移位而不是乘法。 有些算法的工作原理是将一个量左移一位,然后将低位设置为0或1。一些简单的压缩算法就是这样工作的。例如,如果您的累积值在变量x中,而当前值(0或1)在y中,那么写“x=(x<<1)y”比写“x=(x*2)+y”更有意义。两个都做同样的事,但第一个更重要 名义上 对的。你不必想,“哦,对了,乘两等于左移。” 另外,当你谈论移位的算法时,用一个特定的位数左移或右移比算出你想乘或除的2的倍数更方便。 因此,虽然通常情况下,转换没有任何性能上的好处,而不是成倍增加(至少在使用高级语言时没有),但有时,具有转换能力会使您所做的事情更容易理解。 |
![]() |
3
4
|
![]() |
4
1
移位允许访问变量中的特定位。表达式
这允许程序使用不是8位的倍数的整数,这对于数据压缩很有用。
例如,我在
Netflix Prize
将记录(22位用户ID+15位电影ID+12位日期+3位分级)打包到
一个非常常见的特殊情况是打包8
此外,位操作用于 UTF-8 这是一种非常流行的字符编码。Unicode字符通过将其位分布在1、2、3或4个字节来表示。 |
|
John Proctor · C中位的掩蔽范围 7 年前 |
![]() |
Jakey · C枚举定义中的按位移位有什么作用? 7 年前 |
![]() |
Areg Sarvazyan · 从无符号int中提取位的函数 7 年前 |
![]() |
goodvibration · 实施安全左移 7 年前 |
![]() |
AesSedai101 · Kotlin'shl'不工作 7 年前 |
![]() |
Sam Hammamy · 如何在位运算中选择正确的左移位? 7 年前 |