2010-11-04 65 views

Trả lời

173
bool positive = number > 0; 
bool negative = number < 0; 
+76

Tôi phải rất rất rất mệt mỏi! làm cho tôi cười như thế nào vô lý câu hỏi của tôi là – user9969

+11

Chúng ta đều có những khoảnh khắc của chúng tôi :-) –

+14

Điều gì về người nghèo tiêu cực cũ không?! –

54
num < 0 // number is negative 
+12

Tôi cho rằng đây là người mới bắt đầu, chúng tôi nên cố gắng trợ giúp. Khi bạn tìm hiểu đúng cách - hãy kiểm tra điều này theo cách không đúng http://thedailywtf.com/Articles/When_(n_0x3c_0)_won_0x27_t_do_0x2e_.aspx –

+1

lúc đầu tôi không thể tin được câu hỏi trên trang chính, sau đó tôi đến đây ... :) và anh chàng này không phải là một mình ... oh thân yêu :) – slashmais

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

hoặc sử dụng "khác nếu"

+1

Haha. "Tích cực hoặc tiêu cực". –

77

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); 
    } 
} 
+23

Tôi đang suy nghĩ về việc tái cấu trúc điều này với một số đại biểu ... – hunter

+23

Nội bộ, nó sẽ khởi tạo một lớp thực hiện 'ISignDeterminator' bằng cách sử dụng một' SignDeterminatorFactory'. –

+10

Chưa đầy đủ: bạn cũng nên kiểm tra IsNaN();) – slashmais

18

Bạn trẻ và các dấu hiệu nhỏ hơn lạ mắt của bạn.

Quay lại ngày của tôi, chúng tôi phải sử dụng Math.abs(num) != num //number is negative!

+0

(Nếu không rõ ràng, điều này có ý nghĩa hài hước) – Powerlord

+3

Mã này có hoạt động cho * tất cả * số nguyên đã ký không ? –

+2

@Eric: Không, bởi vì nó sẽ ném một 'OverflowException' nếu' num' là 'MinValue' cho bất kỳ loại nào được truyền vào trong (' Int16', 'Int32',' Int64'). Kết quả thậm chí còn tồi tệ hơn cho các giá trị dấu chấm động, trong đó chúng cũng có thể là 'NaN', vì' NaN! = NaN'. – Powerlord

46

Math.Sign method là một cách để thực hiện. Nó sẽ trả về -1 cho các số âm, 1 cho số dương và 0 cho các giá trị bằng 0 (nghĩa là không có dấu). Biến số chính xác đôi và đơn sẽ gây ra một ngoại lệ (ArithmeticException) để được ném nếu chúng bằng NaN.

+0

Wow không biết điều này tồn tại. Điều gì xảy ra với NaN? – Tanmoy

+0

@Tanmoy: Có vẻ như nó sẽ ném [một ngoại lệ] (http://msdn.microsoft.com/en-us/library/system.arithmeticexception.aspx) trong trường hợp đó. – gnovice

+0

thú vị ... tìm hiểu điều gì đó mới mẻ mỗi ngày. –

3
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 
} 
5

Đối với một số nguyên ký 32-bit, chẳng hạn như System.Int32, aka int trong C#:

bool isNegative = (num & (1 << 31)) != 0; 
166

Tất nhiên không ai thực sự cho câu trả lời đúng,

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

ah. hahaha. đã cho tôi một vài phút để nhận ra đây là câu trả lời đúng: D – VOX

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

Bạn chỉ cần so sánh nếu giá trị & giá trị tuyệt đối của nó bằng nhau:

if (value == Math.abs(value)) 
    return "Positif" 
else return "Negatif" 
+1

Kỹ thuật này đã được bao gồm bởi http://stackoverflow.com/a/4099428/497043 –

7

Phiên bản của lập trình viên gốc. Hành vi là chính xác cho các hệ thống nhỏ.

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

Không bao giờ sử dụng tính năng này.

+7

"Không bao giờ sử dụng điều này"? Nhưng đó là mã chất lượng doanh nghiệp, hoàn hảo cho phần mềm doanh nghiệp! Tuy nhiên, bạn thiếu 'IsPositiveChecker',' IsPositiveCheckerInterface', 'IsPositiveCheckerFactory' và' IsPositiveCheckerFactoryInterface'. –

+0

Chỉ cần sử dụng điều này trong ứng dụng giao diện điều khiển Hello World của tôi. 10/10 sẽ làm điều đó một lần nữa. – VSG24

21

Đây là tiêu chuẩn công nghiệp:

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

Đây không phải là C# mặc dù – Episodex

+2

https://twitter.com/MarcosBL/status/641110424193232897 –

+0

Hey! Thats me @BrunoKim :) –

4
bool isNegative(int n) { 
    int i; 
    for (i = 0; i <= Int32.MaxValue; i++) { 
    if (n == i) 
     return false; 
    } 
    return true; 
} 
0

Mã này mất lợi thế của các chỉ lệnh SIMD để cải thiện hiệu suất.

public static bool IsPositive(int n) 
{ 
    var v = new Vector<int>(n); 
    var result = Vector.GreaterThanAll(v, Vector<int>.Zero); 
    return result; 
} 
Các vấn đề liên quan