我想获取没有逻辑声明的数字符号。已有预定义方法Math.Sign()
。但我需要以自己的风格实施。
Tried C#代码:
public int GetSign(int value)
{
int bitFlag = 1;
var m = Convert.ToString(value, 2);
int length = m.Length;
if (m[length - 1] == '1')
{
bitFlag = -1;
}
return bitFlag;
}
条件:
1
,则返回-1
0
,则返回1
请帮助我,如何删除上述IF
声明......
答案 0 :(得分:7)
关于位移的有趣之处: 如果右移位,前导位将传播到右侧。
示例字节:10000000 示例字节>> 1:11000000
整数用32位表示。那么如果我们将位移31位呢会怎么样?前导位将始终传播,这意味着所有正数将变为0,所有负数将变为-1。
因此:
public static int signOfInt(int input)
{
return (input >> 31);
}
将返回0表示正数,-1表示负数。
答案 1 :(得分:0)
我认为这样做会
public int GetSign(int value)
{
return -(((value & 1) << 1) - 1);
}