bit-manipulation - 按位 - 获取字节中第一位的位置
问题描述
我正在尝试考虑一种有效的算法,它可以返回一个位掩码,给出第一个位的位置,即“1”,从输入开始计数。
例如: 000 1 0101 应该给出 000 1 0000 和 1 1111111 应该给出1 0000000
我想最明显的方法是做一个循环来检查第一位并按位移动直到字符串结束,但我想尽可能避免循环。
任何认为他们对此有很好的解决方案的人,请随时发布!
解决方案
您正在寻找的函数/操作码有一个名称::TZCNT
“计算尾随零位的数量”。如果您的 CPU 支持BMI1
指令集扩展,则它可用。结合BTS
:“位测试和设置”,您可以使用两个主要操作码来实现您的目标:
xor eax, eax ; Clears EAX and breaks dependencies
tzcnt edx, [memoryOperand] ; Gets the count of trailing 0's in EDX
bts eax, edx ; Sets the bit found by TZCNT in EAX
此示例中的位空间来自0..31
.
推荐阅读
- javascript - 检测何时加载图像列表
- asp.net - 如何以 xamarin 形式发送带有 HttpClient 帖子的文件
- ruby-on-rails - Rails:Action Cable 仅在数据库中保存第一条记录
- php - 将值数组转换为嵌套关联数组
- php - 致命错误:未捕获的错误:找不到类“Slim\Slim”
- sql - SQL 函数接受多个输入参数并返回一个表
- r - 根据另一个栅格更改一个栅格中的像元值
- python - 网格搜索和交叉验证 SVM
- angular - D3 Angular - 错误 TS2349:无法调用类型缺少调用签名的表达式。类型
- android - 是否可以从 python raspberry pi/ubuntu 访问 SD 卡图像或目录