![]() |
1
6
对于随机访问单独的位,您建议的宏是尽可能好的(只要您打开编译器中的优化)。 如果对你正在访问的位有任何模式,那么你可能会做得更好。例如,如果您经常访问 对 那么,通过提供一种方法来获得两个位而不是一个位,您可能会看到一些改进,即使您并不总是使用这两个位。 与任何优化问题一样,您需要非常熟悉代码的行为,特别是位数组中的访问模式,以便在性能上做出有意义的改进。 更新 :因为您可以访问位的范围,所以您可能会从宏中榨取更多的性能。例如,如果需要访问四位,您可能有如下宏:
这些宏将从每个位的位置0、1、2等中裁剪出四个位(为了减少无意义括号的扩散,您可能需要使用上面的内联函数。)然后定义一个内联函数,例如:
由于这是许多冗长的样板代码,特别是如果有多个不同的宽度,您可能需要编写一个程序来生成
(我注意到您字节中的位存储顺序与我上面写的相反。如果需要,请应用适当的转换来匹配您的结构。) |
![]() |
2
7
我不这么认为。事实上,许多CPU架构不能单独访问位。
关于C++你有
顺便说一句,将位数组分组为
|
![]() |
3
3
以格雷格的解决方案为基础:
即使它们没有对齐,也可以得到至少32位。注意这是故意的
|
![]() |
4
1
如果在“arr”中反转位顺序,则可以从宏中消除减法。这是我能说的最好的话,不知道问题的上下文(如何使用位)。 |
![]() |
5
1
可以优化。 1)使用标准int,它通常是最快访问的整数数据类型。 如果不需要便携,可以通过 调整以下代码。 2)
mod运算符%比anding慢。你不需要减去, 只需调整设置位程序。 |
![]() |
6
0
为什么不创建自己的包装类呢? 然后,可以使用+等运算符向“数组”中添加位,并使用[]运算符返回各个位。 您的宏可以通过使用&7而不是%8来改进,但编译器很可能会为您进行优化。 我最近做的正是你在做的,我的流可能包含任何数量的位。 所以我有如下内容:
等等。它提供了一个可读性很好的代码,您可以为它提供一个类似STL的接口来帮助Faimillarity:) |
![]() |
7
0
既然问题是用C++来标记的,你有什么理由不能简单地使用这个标准? bitset ? |
![]() |
8
0
您可以使用
|
![]() |
giantjenga · 优化整数向量到二进制向量的转换 6 月前 |
![]() |
Daniel Lobo · 使用约束进行优化 7 月前 |
![]() |
Imyaf · 在什么条件下,在组装时对“if”和“if-else”进行比较? 10 月前 |
![]() |
Sergio · python中大量数字的乘法 12 月前 |
![]() |
Sergey Dev · 临时表与表变量 1 年前 |
![]() |
John · 减少C中的内存消耗++ 1 年前 |