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

use*_*971 2 c algorithm bit-manipulation bit-shift bit

我试图仅在设置所有低 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
Run Code Online (Sandbox Code Playgroud)

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

我尝试了几次尝试,popcount但这不适用于所有输入。

Bre*_*dan 9

怎么样:

return x | ((x+1) & 0x80);
Run Code Online (Sandbox Code Playgroud)

  • 或者`返回x | (((x & 0x7F)+1) & 0x80);` 如果也可以设置其他位。 (3认同)
  • @Lundin:如果 MSB 已设置,则 `x | (anything & MSB)` 保证绝对不会执行任何操作,无论 `anything` 是什么。 (2认同)