相关疑难解决方法(0)

您是否曾经不得不在实际项目中使用位移?

您是否曾经在实际编程项目中使用位移?大多数(如果不是全部)高级语言都有移位运算符,但什么时候你真的需要使用它们?

bit-manipulation bit-shift

79
推荐指数
8
解决办法
3万
查看次数

为什么我们需要在java中使用移位运算符?

  1. 使用Shift运算符而不是使用除法和乘法的目的是什么?

  2. 使用移位运营商还有其他好处吗?

  3. 应该在哪里尝试使用移位运算符?

java bit-shift

14
推荐指数
2
解决办法
9572
查看次数

除了快速数学之外,有没有什么好理由使用位移?

我理解按位操作以及它们如何用于不同目的,例如权限.但是,我似乎不明白比特移位运算符的用途.我理解他们是如何工作的,但我想不出任何我可能想要使用它们的场景,除非我想做一些非常快速的乘法或除法.有没有其他理由使用位移?

bit-manipulation bit-shift

9
推荐指数
3
解决办法
4645
查看次数

为什么按位运算符比乘法/除法/模数慢?

众所周知,乘法,整数除法和2的幂的模可以作为按位运算更有效地重写:

>>> x = randint(50000, 100000)
>>> x << 2 == x * 4
True
>>> x >> 2 == x // 4
True
>>> x & 3 == x % 4
True
Run Code Online (Sandbox Code Playgroud)

在诸如C/C++和Java等编译语言中,测试表明按位运算通常比算术运算更快.(见这里这里).但是,当我在Python中测试这些时,我得到了相反的结果:

In [1]: from random import randint
   ...: nums = [randint(0, 1000000) for _ in range(100000)]

In [2]: %timeit [i * 8 for i in nums]
7.73 ms ± 397 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) …
Run Code Online (Sandbox Code Playgroud)

python optimization bitwise-operators micro-optimization

9
推荐指数
1
解决办法
598
查看次数