首页 > 解决方案 > 使用按位运算检测多字节字中的 0xff

问题描述

我有一个由 4 个字节组成的 32 位无符号整数,例如 : 0x12ff3456

我正在尝试找到一个按位操作来替换0xff字节0x01,以及其他任何内容,0x00例如:

0x12ff3456=>0x00010000

0x543245ff=> 0x00000001...等。

一次只能有一个字节构成 32 位无符号整数0xff。有没有人知道如何以尽可能少的操作来执行此操作?折叠(bitshifts + ands)是一种选择,但需要太多的操作。

标签: bit-manipulationbitwise-operatorsbit-shiftbitwise-and

解决方案


Bit Twiddling Hacks页面解释了如何获取掩码,其中每个零字节都标有高位集。你可以在这里应用它:

((~x - 0x01010101) & x & 0x80808080) >> 7

推荐阅读