bit-manipulation - 使用按位运算检测多字节字中的 0xff
问题描述
我有一个由 4 个字节组成的 32 位无符号整数,例如 : 0x12ff3456
。
我正在尝试找到一个按位操作来替换0xff
字节0x01
,以及其他任何内容,0x00
例如:
0x12ff3456
=>0x00010000
0x543245ff
=> 0x00000001
...等。
一次只能有一个字节构成 32 位无符号整数0xff
。有没有人知道如何以尽可能少的操作来执行此操作?折叠(bitshifts + ands)是一种选择,但需要太多的操作。
解决方案
Bit Twiddling Hacks页面解释了如何获取掩码,其中每个零字节都标有高位集。你可以在这里应用它:
((~x - 0x01010101) & x & 0x80808080) >> 7
推荐阅读
- sql - 使用 MAX 和 GROUP BY 时如何只得到一个结果
- python - 当我尝试为线性回归运行此代码时,输入包含 NaN、无穷大或对于 dtype('float64') 错误而言太大的值
- amazon-web-services - AWS - 如何使用 Javascript SDK 获取 Cloudfront 指标
- javascript - 终端输出:manpath:无法设置语言环境;确保 $LC_* 和 $LANG 是正确的
- sql - DBATools - 从 Export-DBAScript -PATH 中删除时间戳
- java - 在 Java 中创建算法
- apache-kafka - Kafka - 服务器上的内存限制
- html - 滚动在我的 HTML/CSS 网站上不起作用
- javascript - 使用 PReact(或其他框架)的苗条行为
- python - 是否有一种精确的方法来测量 Python(3.7)中特定字体的文本大小?