if ((x - 0x01010101) & (~x) & 0x80808080)
为了说明方便,可以将 x 看成只有一个字节,则上面的问题可以简化为
if ((x - 0x01) & (~x) & 0x80)
先看 0x80 对应二进制 0b1000,0000 与该字节进行按位取与,只有在 (x-0x01) 和 (~x) 第8位都为1的情况下,该 if 条件才会成立。
对于 (x-0x01) ,只有 x =0 或者 x>0x80,其第8位才为1。
对于 (~x) ,只有 x<0x80,其第8位才为1。
故只有 x = 0 时,if ((x - 0x01) & (~x) & 0x80) 才成立
对于 if ((x - 0x01010101) & (~x) & 0x80808080) , x 变量 4个字节中有一个字节为0,就成立
参考文献:
https://blog.csdn.net/ycnian/article/details/12950419