代码之家  ›  专栏  ›  技术社区  ›  B.Balamanigandan

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

  •  0
  • B.Balamanigandan  · 技术社区  · 9 年前

    我想 获取不带逻辑语句的数字的符号 。已经有预定义的方法可用 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 回复  |  直到 9 年前
        1
  •  7
  •   Gary McNall    7 年前

    比特移位的有趣之处: 如果右移位,前导位将传播到右侧。

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

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

    因此:

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

    对于正数将返回0,对于负数将返回-1。

        2
  •  0
  •   Superman    9 年前

    我想这个可以

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