程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

大量字节上的位操作

发布于2019-11-19 10:11     阅读(1250)     评论(0)     点赞(25)     收藏(5)


使用简单的文件加密/解密进行一些练习,当前仅读取一堆字节,然后一次对每个字节执行适当的位操作,然后将它们写入输出文件。

这种方法似乎很慢。例如,如果我想对每个字节乘以0xFF进行异或,我会遍历每个字节并对0xFF进行异或,而不是做一些魔术,每个字节都会快速进行异或。

有更好的方法来执行位操作而不是一次执行字节操作吗?


解决方案


无论如何,似乎每个字节都必须是

  • 从内存中读取
  • 以某种方式修改,并且
  • 写回内存。

您可以一次对多个字节进行操作,例如通过对4个甚至8个字节的整数执行XOR操作,从而节省一点时间(没有双关语),从而将与循环管理相关的开销除以大约是4或8倍,但是对于整个算法而言,这种改进可能不会带来可观的收益。

通过读取表中的预先计算的值来替换CPU /语言的“本机”位操作(XOR,Shifts,Rotations等),可以找到更多的改进。但是请注意,这些本机操作通常是经过优化的,并且您必须在设计外部等效操作以及精确测量这些操作的相对性能方面非常勤奋。

编辑:糟糕,我刚刚记下了[Python]标签,并且在另一个响应中也引用了numpy。
当心... Numpy按位数组建议是合理的,但这全都取决于手头问题的实际参数。例如,在对齐numpy的按位函数所隐含的基础数组时,可能会浪费大量时间。看到这个看起来很相关的堆栈溢出问题在着眼于XOR操作时,该问题为改进循环等以及进行概要分析提供了许多可行的提示。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/160264/044355f42cfef50cd98a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)