Réponses:
bool positive = number > 0;
bool negative = number < 0;
Bien sûr, personne n'a donné la bonne réponse,
num != 0 // num is positive *or* negative!
is positive or is negative
nonis (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
utilisant a SignDeterminatorFactory
.
int
?! Dans quel pays magique de C # travaillez-vous?
IsImaginary
.
La méthode Math.Sign est une façon de procéder. Il renverra -1 pour les nombres négatifs, 1 pour les nombres positifs et 0 pour les valeurs égales à zéro (c'est-à-dire que zéro n'a pas de signe). Les variables de précision double et simple provoqueront une exception ( ArithmeticException ) si elles égalent NaN.
Math.Sign
(car il définit explicitement les valeurs de retour possibles.)
num < 0 // number is negative
Il s'agit de la norme de l'industrie:
int is_negative(float num)
{
char *p = (char*) malloc(20);
sprintf(p, "%f", num);
return p[0] == '-';
}
Vous les jeunes et votre fantaisie moins que des signes.
À l'époque, nous devions utiliser Math.abs(num) != num //number is negative
!
OverflowException
si num
est MinValue
pour tout type est passé dans ( Int16
, Int32
, Int64
). Les résultats sont encore pires pour les valeurs à virgule flottante, où ils pourraient également l'être NaN
depuis NaN != NaN
.
public static bool IsPositive<T>(T value)
where T : struct, IComparable<T>
{
return value.CompareTo(default(T)) > 0;
}
Version du programmeur natif. Le comportement est correct pour les systèmes little-endian.
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;
}
Ne l'utilisez jamais.
IsPositiveChecker
, IsPositiveCheckerInterface
, IsPositiveCheckerFactory
et IsPositiveCheckerFactoryInterface
, cependant.
result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;
place. De plus, vous devriez avoir un return result;
quelque part là-dedans à la fin pour qu'il retourne réellement le résultat.
if (num < 0) {
//negative
}
if (num > 0) {
//positive
}
if (num == 0) {
//neither positive or negative,
}
ou utilisez "else ifs"
Pour un entier signé 32 bits, tel que System.Int32
aka int
en C #:
bool isNegative = (num & (1 << 31)) != 0;
Il suffit de comparer si la valeur et sa valeur absolue sont égales:
if (value == Math.abs(value))
return "Positif"
else return "Negatif"
Le premier paramètre est stocké dans le registre EAX et le résultat aussi.
function IsNegative(ANum: Integer): LongBool; assembler;
asm
and eax, $80000000
end;