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

Get Sign of a Number without Logical Statement in C#

我想在没有逻辑语句的情况下获取数字的符号。已经有一个预定义的方法可用 Math.Sign()。但是我需要以我自己的风格来实现。

尝试过的 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;
}

条件:

请帮助我,如何删除上面的IF语句...

我想这样就可以了

public int GetSign(int value)
{
    return -(((value & 1) << 1) - 1);
}

位移位的有趣之处: 如果右移这些位,前导位将向右传播。

示例字节:10000000 示例字节 >> 1 : 11000000

整数需要32位来表示。那么如果我们将位移动 31 位会发生什么?前导位将始终传播,这意味着所有正数都将变为 0,所有负数将变为 -1。

因此:

public static int signOfInt(int input)
{
    return (input >> 31);
}

将 return 0 表示正数,-1 表示负数。