我想在微处理器中实现符号和零标志设置。因此,我需要编写一个函数来查找数字是正数,负数还是零,而不使用if
或for
循环,并且仅允许布尔和位运算符。我做了以下。但是如何为zero
条件实现它?
int status (int x) {
int sign = (x >> 31);
return sign;
}
有什么建议吗?
答案 0 :(得分:7)
以下内容将返回-1
为负值,0
为零,1
为正值x
。
int status (int x) {
int sign = (x > 0) - (x < 0);
return sign;
}
答案 1 :(得分:2)
这足以达到你的目的吗?
int status(int val)
{
int minus = (val&0x80000000)&&TRUE;
int pos = (val&0x7FFFFFFF)&&(!(val&0x80000000));
int r = 0 - minus + pos;
return r;
}
答案 2 :(得分:0)
试试这个
int status (unsigned no) {
int sign = 0;
// If Zero // If -Ve = -1 OR If +Ve = -2
(sign = ( no | 0 )) && ( sign = (~( ( (no << 1) >> 1 ) == no)) );
// If +Ve
(sign == -2) && (sign = 1);
return sign;
}