39 votes

Java de base hexadécimale double littérale

Je suis des études pour java de certification. Et je suis curieux de connaître la java des littéraux. Je sais que c'est possible de faire quelque chose comme ceci:

int i = 0xAA;
long l = 0xAAL;

Aussi c'est possible pour virgule flottante variables:

double d = 123d;
float f = 123f;

J'ai donc logiquement pensé avec ces exemples, qu'il en serait de même pour les valeurs hexadécimales. Tout comme je peux ajouter L pour long littéraux, je pourrais ajouter " d " ou "f", mais la logique est erronée, puisque 'F' et 'D' sont valables valeurs hexadécimales.

Il n'est pas possible de faire quelque chose comme ceci:

double d = 0xAAAAAAAAAAAAAAAAAAd;

Est-ce tout simplement pas autorisé par Java ou il y a un moyen simple de le faire que je ne sais pas?

60voto

Jon Skeet Points 692016

Il s'avère qu'il est possible, bien que cela m'a surpris. La Section 3.10.2 de la JLS donne la structure de la virgule flottante littéraux, y compris HexadecimalFloatingPointLiteral.

public class Test {

    public static void main(String[] args) {
        double d1 = 0xAAAAAAAAAAAAAAAAAAp0d;
        double d2 = 0x1.8p1d;

        System.out.println(d1); // A very big number
        System.out.println(d2); // 24 = 1.5 * 2^1
    }
}

L' p est requis dans le cadre de l'exposant binaire - la valeur après l' p est le nombre de bits à décaler la valeur de gauche. D'autres exemples:

0x1.4p0d => 1.25 (binary 0.01 shifted 0 bits)
0x8p-4d => 0.5 (binary 1000 shifted *right* 4 bits)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X