在 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;
}
条件:
- 如果最后一位是
1
那么 return -1
- 如果最后一位是
0
那么 return 1
请帮助我,如何删除上面的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 表示负数。
我想在没有逻辑语句的情况下获取数字的符号。已经有一个预定义的方法可用 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;
}
条件:
- 如果最后一位是
1
那么 return-1
- 如果最后一位是
0
那么 return1
请帮助我,如何删除上面的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 表示负数。