【发布时间】:2013-04-16 17:43:07
【问题描述】:
我有以下功能
int sign(int x) {
int sign = (x >> 31);
sign = sign | 1;
return sign;
}
我希望:
- 为负数返回 -1(第一行)
- 为正数返回 1(第二行)
- 零返回 0
我被困在最后一项上。如果 x 为零,如何使用位运算符仅返回零?
【问题讨论】:
-
为什么要使用按位运算?一个答案是
if (x == 0) return 0;,但这不算数吗? -
另外,考虑使用
sizeof而不是硬编码尺寸 -
sign = sign | !!x;算不算? -
如果这不是纯粹的智力练习:不要。
if/else可能看起来并不陌生,但它确实有效而且很容易看到它有效。 -
return (x) ? ((x>>31) ? -1 : 1) : 0;
标签: c bit-manipulation