Làm cách nào để kiểm tra xem một số dương hay âm trong C #?
Làm cách nào để kiểm tra xem một số dương hay âm trong C #?
Câu trả lời:
bool positive = number > 0;
bool negative = number < 0;
Tất nhiên không ai thực sự đưa ra câu trả lời đúng,
num != 0 // num is positive *or* negative!
is positive or is negative
khôngis (positive or negative)
QUÁ TUYỆT VỜI!
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);
}
}
ISignDeterminator
bằng cách sử dụng một SignDeterminatorFactory
.
int
nào?! Vùng đất huyền diệu nào của C # bạn đang làm việc?
IsImaginary
.
Các phương pháp Math.Sign là một trong những con đường để đi. Nó sẽ trả về -1 cho các số âm, 1 cho các số dương và 0 cho các giá trị bằng 0 (tức là số 0 không có dấu). Các biến chính xác kép và đơn sẽ khiến một ngoại lệ ( ArithaturesException ) bị ném nếu chúng bằng NaN.
Math.Sign
(vì nó xác định rõ ràng các giá trị trả về có thể.)
num < 0 // number is negative
Đây là tiêu chuẩn ngành:
int is_negative(float num)
{
char *p = (char*) malloc(20);
sprintf(p, "%f", num);
return p[0] == '-';
}
Bạn trẻ và dấu hiệu ưa thích của bạn ít hơn.
Ngày trước, chúng tôi phải sử dụng Math.abs(num) != num //number is negative
!
OverflowException
nếu num
là MinValue
đối với bất cứ loại được thông qua vào ( Int16
, Int32
, Int64
). Kết quả thậm chí còn tồi tệ hơn đối với các giá trị dấu phẩy động, nơi chúng cũng có thể NaN
, kể từ đó NaN != NaN
.
public static bool IsPositive<T>(T value)
where T : struct, IComparable<T>
{
return value.CompareTo(default(T)) > 0;
}
Phiên bản lập trình viên bản địa. Hành vi là chính xác cho các hệ thống endian 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);
}
return result;
}
Đừng bao giờ sử dụng cái này.
IsPositiveChecker
, IsPositiveCheckerInterface
, IsPositiveCheckerFactory
, và IsPositiveCheckerFactoryInterface
, mặc dù.
result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;
thay thế. Ngoài ra, bạn nên có một return result;
nơi nào đó ở đó vào cuối để nó thực sự sẽ trả về kết quả.
if (num < 0) {
//negative
}
if (num > 0) {
//positive
}
if (num == 0) {
//neither positive or negative,
}
hoặc sử dụng "if ifs"
Đối với số nguyên có chữ ký 32 bit, chẳng hạn như System.Int32
, int
trong C #:
bool isNegative = (num & (1 << 31)) != 0;
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"
Tham số đầu tiên được lưu trữ trong thanh ghi EAX và kết quả cũng có.
function IsNegative(ANum: Integer): LongBool; assembler;
asm
and eax, $80000000
end;