如何在C#中检查数字是正数还是负数?

如何在C#中检查数字是正数还是负数?

bool positive = number > 0; bool negative = number < 0; 

当然没有人给出正确的答案,

 num != 0 // num is positive *or* negative! 

OVERKILL!

 public static class AwesomeExtensions { public static bool IsPositive(this int number) { return number > 0; } public static bool IsNegative(this int number) { return number < 0; } public static bool IsZero(this int number) { return number == 0; } public static bool IsAwesome(this int number) { return IsNegative(number) && IsPositive(number) && IsZero(number); } } 
 num < 0 // number is negative 

Math.Sign方法是一种方法。 对于负数,它将返回-1,对于正数将返回1,对于等于零的值(即零没有符号),返回0。 如果双精度和单精度variables等于NaN,则会引发exception( ArithmeticException )。

这是行业标准:

 int is_negative(float num) { char *p = (char*) malloc(20); sprintf(p, "%f", num); return p[0] == '-'; } 

你年轻和你的幻想低于标志。

回到我的一天,我们不得不使用Math.abs(num) != num //number is negative

  public static bool IsPositive<T>(T value) where T : struct, IComparable<T> { return value.CompareTo(default(T)) > 0; } 

本机程序员的版本。 小端系统的行为是正确的。

 bool IsPositive(int number) { bool result = false; IntPtr memory = IntPtr.Zero; try { memory = Marshal.AllocHGlobal(4); if (memory == IntPtr.Zero) throw new OutOfMemoryException(); Marshal.WriteInt32(memory, number); result = Marshal.ReadByte(memory, 3) & 0x80 == 0; } finally { if (memory != IntPtr.Zero) Marshal.FreeHGlobal(memory); } } 

永远不要使用这个。

 if (num < 0) { //negative } if (num > 0) { //positive } if (num == 0) { //neither positive or negative, } 

或使用“其他ifs”

对于32位有符号整数,例如System.Int32 ,在C#中又名int

 bool isNegative = (num & (1 << 31)) != 0; 
 public static bool IsNegative<T>(T value) where T : struct, IComparable<T> { return value.CompareTo(default(T)) < 0; } 

你只需要比较它的值和它的绝对值是否相等:

 if (value == Math.abs(value)) return "Positif" else return "Negatif" 
 bool isNegative(int n) { int i; for (i = 0; i <= Int32.MaxValue; i++) { if (n == i) return false; } return true; } 
 int j = num * -1; if (j - num == j) { // Num is equal to zero } else if (j < i) { // Num is positive } else if (j > i) { // Num is negative } 

此代码利用SIMD指令来提高性能。

 public static bool IsPositive(int n) { var v = new Vector<int>(n); var result = Vector.GreaterThanAll(v, Vector<int>.Zero); return result; }