如何在不使用if或for的情况下查找数字是正数,负数还是零?

时间:2013-05-24 05:09:26

标签: c function boolean logic

我想在微处理器中实现符号和零标志设置。因此,我需要编写一个函数来查找数字是正数,负数还是零,而不使用iffor循环,并且仅允许布尔和位运算符。我做了以下。但是如何为zero条件实现它?

int status (int x) {
    int sign = (x >> 31);
    return sign;
}

有什么建议吗?

3 个答案:

答案 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;
}