相关疑难解决方法(0)

哪个更快:x << 1或x << 10?

我不想优化任何东西,我发誓,我只想出于好奇而问这个问题.我知道,在大多数硬件有位移(例如的组件的命令shl,shr),它是一个命令.但是,你转移了多少比特(纳秒级,或CPU技巧)是否重要?换句话说,在任何CPU上是否更快?

x << 1;
Run Code Online (Sandbox Code Playgroud)

x << 10;
Run Code Online (Sandbox Code Playgroud)

请不要因为这个问题而恨我.:)

c c++ cpu performance low-level

82
推荐指数
8
解决办法
7018
查看次数

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

众所周知,乘法,整数除法和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
查看次数

从8位复制到32位

我正在尝试将8位值复制到32位,并想问问是否有可能编写单行算法来复制位值。

例如:

1100 1011 -> 1111 1111 0000 0000 1111 0000 1111 1111
Run Code Online (Sandbox Code Playgroud)

如果有可能,我想了解其背后的逻辑。

c bit-manipulation duplicates expansion

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

80286:乘以 10 最快的方法是什么?

要将一个数字乘以 2 的任意倍数,我将对其进行多次移位。

有没有这样的技术可以在更少的周期内将数字乘以 10?

assembly micro-optimization x86-16

2
推荐指数
1
解决办法
1022
查看次数

逻辑/算术移位更少的位更快吗?

x>>2不是更快x>>31?换句话说,sar x, 2sar x, 31? 我做了一些简单的测试,它们似乎具有相同的速度。我将不胜感激任何确凿的证据。

c++ performance x86 assembly cpu-architecture

2
推荐指数
1
解决办法
111
查看次数