我有一个 16 位值的流,我需要调整每个样本的 4 个最低有效位。每条短裤的新值都不同,但重复每 X 条短裤 - 本质上是用 ID 标记每条短裤。
有没有比 for 循环更快的小技巧?
更多详情 我正在将文件从一种格式转换为另一种格式。目前使用 FILE* 实现,但如果有帮助,我可以使用特定于 Windows 的 API。
[while data remaining]
{
read X shorts from input
tag 4 LSB's
write modified data to output
}
除了批量操作之外,我想我正在寻找关于踩踏最后 4 位的最佳方法的意见。
- 右移 4,左移 4,|在新值(value)观中
- & 在我的零位中,然后 |在 1 位中
- 取模16,增加新值
我们现在只支持 win7(32 位或 64 位),因此硬件将是人们为此选择的任何东西。
最佳答案
如果您正在研究例如一个 32 位平台,你一次可以做 2 个。或者在现代 x86 等价物上,您可以使用 SIMD 指令一次对 128 位进行操作。
除此之外,没有任何微不足道的方法可以避免遍历整个数据集,因为这听起来像是您必须修改每个元素!
关于c++ - 修改数据流的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010500/