如何在不使用if或for的情况下查找数字是正数,负数还是零?
我想在微处理器中实现符号和零标志设置。 因此,我需要编写一个函数来查找数字是正数,负数还是零而不使用if
或for
循环,并且只允许使用布尔和位运算符 。 我做了以下。 但是如何实现zero
条件呢?
int status (int x) { int sign = (x >> 31); return sign; }
有什么建议 ?
以下将返回-1
表示负值, 0
表示零, 1
表示正值x
。
int status (int x) { int sign = (x > 0) - (x < 0); return sign; }
这足够你的目的吗?
int status(int val) { int minus = (val&0x80000000)&&TRUE; int pos = (val&0x7FFFFFFF)&&(!(val&0x80000000)); int r = 0 - minus + pos; return r; }
试试这个
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; }