Answers:
bool positive = number > 0;
bool negative = number < 0;
当然,没有人会给出正确的答案,
num != 0 // num is positive *or* negative!
is positive or is negative
不是is (positive or negative)
过量杀!
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(即零没有符号)。如果双精度和单精度变量等于NaN,则将引发异常(ArithmeticException)。
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;
在末尾有一个地方,以便它实际上会返回结果。
对于32位带符号整数(例如System.Int32
,又称为int
C#):
bool isNegative = (num & (1 << 31)) != 0;
您只需要比较值及其绝对值是否相等:
if (value == Math.abs(value))
return "Positif"
else return "Negatif"
第一个参数存储在EAX寄存器中,并存储结果。
function IsNegative(ANum: Integer): LongBool; assembler;
asm
and eax, $80000000
end;