Estoy estudiando para la certificación java. Y tengo curiosidad acerca de los literales de Java. Sé que es posible hacer algo como esto:
int i = 0xAA; long l = 0xAAL;También esto es posible para variables de punto flotante:
double d = 123d; float f = 123f;Entonces, lógicamente pensé con estos ejemplos que lo mismo se aplicaría para el hexadecimal. Al igual que puedo agregar L para literales largos, podría agregar 'd' o 'f' pero la lógica es defectuosa ya que 'F' y 'D' son valores hexadecimales válidos.
No es posible hacer algo como esto:
double d = 0xAAAAAAAAAAAAAAAAAAd;¿Esto simplemente no está permitido por Java o hay una manera simple de hacerlo que no conozco?
Resulta que es posible, aunque eso me sorprendió. La sección 3.10.2 del JLS proporciona la estructura de los literales de punto flotante, incluido 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 } } La p se requiere como parte del exponente binario: el valor después de la p es el número de bits para desplazar el valor a la izquierda. Otros ejemplos:
0x1.4p0d => 1.25 (binary 0.01 shifted 0 bits) 0x8p-4d => 0.5 (binary 1000 shifted *right* 4 bits)