I am studying for java certification. And i'm curious about the java literals. I know it is possible to do something like this:
int i = 0xAA; long l = 0xAAL;
Also this is possible for floating-point variables:
double d = 123d; float f = 123f;
So I logically thought with these examples that the same would apply for hexadecimal. Just like i can add L for long literals, I could add 'd' or 'f' but the logic is flawed since 'F' and 'D' are valid hexadecimal values.
It is not possible to do something like this:
double d = 0xAAAAAAAAAAAAAAAAAAd;
Is this just not allowed by Java or there is a simple way to do it that I don't know?
A hexadecimal integer literal begins with the 0 digit followed by either an x or X, followed by any combination of the digits 0 through 9 and the letters a through f or A through F. The letters A (or a) through F (or f) represent the values 10 through 15, respectively.
Double Literals Are Not UniqueExtra zeroes that don't change the value are not stored. Basically, Java converts these values to some internal format, where the additional zeroes don't play a factor.
It turns out it is possible, although that surprised me. Section 3.10.2 of the JLS gives the structure of floating point literals, including 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 } }
The p
is required as part of the binary exponent - the value after the p
is the number of bits to shift the value left. Other examples:
0x1.4p0d => 1.25 (binary 0.01 shifted 0 bits) 0x8p-4d => 0.5 (binary 1000 shifted *right* 4 bits)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With