位屏蔽和位操作

时间:2020-09-05 13:17:53

标签: c++

假设我有一个字节大小的变量,例如:unsigned char a = 0b0000'1111

,然后使用位掩码打开/关闭某个位。我想知道的是,这种无符号char变量数组的打开/关闭过程很慢,对于数组大小,比如20250000等

1 个答案:

答案 0 :(得分:0)

执行这样的操作将非常快。 C ++中的翻转位将映射到相对少量的汇编代码。有x86指令可翻转位,因此没有理由使其变慢。

这样说,如果您正在编写一个更大的应用程序,则很有可能应用程序中的其他地方会导致大多数性能下降,而不是这种基本的位翻转代码。这样的一个例子可能是您的阵列将导致某些高速缓存未命中(导致性能下降),或者在阵列上施加一些预设会降低您的性能。

因此,即使这段代码很慢,也可能有一些方法可以优化代码以提高性能。例如,您可以将数组分成多个块,然后使用线程并行地对这些块执行计算/位翻转,而不是线性迭代数组。