通过仅使用C中的按位运算符检查数字x是否为正(x> 0)

Ete*_*ner 16 c bit-manipulation

isPositive-返回true如果x > 0,否则false

例: isPositive(-1)

法律行动: ! ~ & ^ | + << >>

Max ops: 8

注意:不允许使用条件语句.

inline bool isPositive(int32_t x) {
  return ???;
}
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 19

int isPositive(int x) {
   return !((x&(1<<31)) | !x);
}
Run Code Online (Sandbox Code Playgroud)

x&(1<<31 是检查数字是否为负数.

!x 是检查数字是否为零.

如果数字不是负数而不是零,则数字为正数.


Mat*_*hew 11

return !((x & 0x80000000) >> 31 | !x);
Run Code Online (Sandbox Code Playgroud)

  • `x&0x80000000`丢弃除最高位之外的所有位,只有标志位,但是`>> 31`在任何保证MSB侧位为右移的系统上都是超级的 (3认同)
  • 你可以使用(1 << 31)而不是0x80000000 (3认同)
  • 最好使用`sizeof(int)*CHAR_BIT`来确定int中的位数,然后使用正确的掩码和移位值. (2认同)

Hen*_*rik 10

int isPositive(int x)
{
 return (!(x & 0x80000000) & !!x); 
}
Run Code Online (Sandbox Code Playgroud)