在C#中获取没有逻辑语句的数字的符号

时间:2016-09-21 04:32:47

标签: c# bit sign

我想获取没有逻辑声明的数字符号。已有预定义方法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声明......

2 个答案:

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