Comment obtenir un numéro long plus long que Long.MAX_VALUE?
Je veux que cette méthode renvoie true
:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
Cette méthode ne peut pas renvoyer true
. C'est le point de Long.MAX_VALUE
. Ce serait vraiment déroutant si son nom était ... faux. Ensuite, il devrait être simplement appelé Long.SOME_FAIRLY_LARGE_VALUE
et ont littéralement zéro utilisation raisonnable. Utilisez simplement Android isUserAGoat
, ou vous pouvez lancer votre propre fonction qui renvoie toujours false
.
Notez qu'un long
en mémoire prend un nombre fixe d'octets. d'Oracle :
long: le type de données long est un entier complément à deux signé 64 bits. Il a une valeur minimale de -9 223 372 036 854 775 808 et une valeur maximale de 9 223 372 036 854 775 807 (inclus). Utilisez ce type de données lorsque vous avez besoin d'une plage de valeurs plus large que celles fournies par int.
Comme vous le savez peut-être en informatique de base ou en mathématiques discrètes, il y a 2 ^ 64 valeurs possibles pour un long, car il s'agit de 64 bits. Et comme vous le savez grâce aux mathématiques discrètes ou à la théorie des nombres ou au bon sens, s'il n'y a qu'un nombre infini de possibilités, l'une d'entre elles doit être la plus grande. Ce serait Long.MAX_VALUE
. Vous demandez donc quelque chose de similaire à "y a-t-il un entier qui est> 0 et <1?" Mathématiquement absurde.
Si vous en avez réellement besoin pour quelque chose de réel, utilisez la classe BigInteger
.
Tu ne peux pas. Si vous avez une méthode appelée isBiggerThanMaxLong(long)
, elle doit toujours renvoyer false
.
Si vous deviez incrémenter les bits de Long.MAX_VALUE
, la prochaine valeur doit être Long.MIN_VALUE
. Renseignez-vous sur deux compléments et cela devrait vous dire pourquoi.
Premièrement, la méthode ci-dessous ne se compile pas car il manque le type de retour et elle devrait être Long.MAX_VALUE
au lieu de Long.Max_value
.
public static boolean isBiggerThanMaxLong(long value) {
return value > Long.Max_value;
}
La méthode ci-dessus ne peut jamais renvoyer true
car vous comparez une valeur long
avec Long.MAX_VALUE
, voyez la signature de méthode que vous ne pouvez passer que long
là. Tout long
peut être aussi grand que le Long.MAX_VALUE
, ça ne peut pas être plus grand que ça.
Vous pouvez essayer quelque chose comme ça avec BigInteger class:
public static boolean isBiggerThanMaxLong(BigInteger l){
return l.compareTo(BigInteger.valueOf(Long.MAX_VALUE))==1?true:false;
}
Le code ci-dessous renverra true
:
BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE).
add(BigInteger.valueOf(Long.MAX_VALUE));
System.out.println(isBiggerThanMaxLong(big3)); // prints true
Si triangle.lborderA
Est en effet long, alors le test dans le code d'origine est trivialement vrai, et il n'y a aucun moyen de le tester. C'est aussi inutile.
Cependant, si triangle.lborderA
Est un double, la comparaison est utile et peut être testée. isBiggerThanMaxLong(1e300)
retourne vrai.
public static boolean isBiggerThanMaxLong(double in){
return in > Long.MAX_VALUE;
}