如果所有低 7 位都设置而没有分支,则设置第 8 位

问题描述

仅当设置了所有低 7 位而不引入分支时,我才尝试设置字节值中的最高位。

例如,给定以下输入:

input: 0b_0010_1100 -> return same value
input: 0b_0101_0101 -> return same value
input: 0b_0111_1111 -> all bits set except MSB,return 0xff
input: 0b_1010_1100 -> MSB is already set,return same value

这只需要适用于 8 位大小的值。

我尝试使用 popcount 进行了几次尝试,但对所有输入都不起作用。

解决方法

怎么样:

return x | ((x+1) & 0x80);