如果所有低 7 位都已设置且没有分支,则设置第 8 位
Set 8th bit if all lower 7 bits are set without branching
我试图在不引入分支的情况下仅在设置所有低 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);
我试图在不引入分支的情况下仅在设置所有低 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);