C中有一个符号函数:
int sign(int x)
{
if(x > 0) return 1;
if(x < 0) return -1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,比较成本非常高,所以我需要修改功能以减少比较次数.
我尝试了以下方法:
int sign(int x)
{
int result;
result = (-1)*(((unsigned int)x)>>31);
if (x > 0) return 1;
return result;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只得到一个比较.
有什么方法可以避免比较吗?
编辑 可能重复没有给出一个问题的答案,因为所有的答案是C++,使用比较(我应该避免的)或不返回-1,+1,0.
c ×1