ฉันจะตรวจสอบว่าตัวเลขเป็นบวกหรือลบใน C # ได้อย่างไร
ฉันจะตรวจสอบว่าตัวเลขเป็นบวกหรือลบใน C # ได้อย่างไร
คำตอบ:
bool positive = number > 0;
bool negative = number < 0;
แน่นอนว่าไม่มีใครได้รับคำตอบที่ถูกต้อง
num != 0 // num is positive *or* negative!
is positive or is negative
ไม่ใช่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);
}
}
ISignDeterminator
SignDeterminatorFactory
int
?! คุณกำลังทำงานในดินแดนมหัศจรรย์ของ C #
IsImaginary
คุณควรเพิ่ม
วิธี Math.Signเป็นวิธีหนึ่งที่จะไป มันจะกลับ -1 สำหรับจำนวนลบ 1 สำหรับตัวเลขบวกและ 0 สำหรับค่าเท่ากับศูนย์ (เช่นศูนย์ไม่มีสัญญาณ) ตัวแปรความแม่นยำสองเท่าและเดี่ยวจะทำให้เกิดข้อยกเว้น ( ArithmeticException ) หากมีการโยนเท่ากับ NaN
Math.Sign
(เพราะมันกำหนดค่าตอบแทนที่เป็นไปได้อย่างชัดเจน)
num < 0 // number is negative
นี่คือมาตรฐานอุตสาหกรรม:
int is_negative(float num)
{
char *p = (char*) malloc(20);
sprintf(p, "%f", num);
return p[0] == '-';
}
คุณยังเด็กและสัญญาณน้อยกว่าที่คุณจินตนาการ
ย้อนกลับไปในวันที่เราต้องใช้Math.abs(num) != num //number is negative
!
OverflowException
ถ้าnum
เป็นMinValue
ประเภทสิ่งที่ผ่านไปมาใน ( Int16
, Int32
, Int64
) ผลลัพธ์ยิ่งแย่ลงสำหรับค่าของจุดลอยตัวซึ่งอาจเป็นNaN
เช่นนั้นNaN != NaN
ได้
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);
}
return result;
}
ไม่เคยใช้สิ่งนี้
IsPositiveChecker
, IsPositiveCheckerInterface
, IsPositiveCheckerFactory
และIsPositiveCheckerFactoryInterface
แม้ว่า
result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;
แทน นอกจากนี้คุณควรมีreturn result;
ที่ไหนสักแห่งในตอนท้ายเพื่อที่จะได้ผลลัพธ์ที่แท้จริง
if (num < 0) {
//negative
}
if (num > 0) {
//positive
}
if (num == 0) {
//neither positive or negative,
}
หรือใช้ "else ifs"
สำหรับจำนวนเต็มแบบ 32 บิตเช่นSystem.Int32
aka int
ใน C #:
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;
}
พารามิเตอร์แรกจะถูกเก็บไว้ใน EAX register และผลลัพธ์เช่นกัน
function IsNegative(ANum: Integer): LongBool; assembler;
asm
and eax, $80000000
end;