回答:
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ビットの符号付き整数(C#のSystem.Int32
別名int
)の場合:
bool isNegative = (num & (1 << 31)) != 0;
最初のパラメータはEAXレジスタと結果にも格納されます。
function IsNegative(ANum: Integer): LongBool; assembler;
asm
and eax, $80000000
end;