Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java hexadecimal base double literal

Tags:

java

hex

literals

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?

like image 551
Bruno Calça Avatar asked Mar 10 '17 16:03

Bruno Calça


People also ask

What is hexadecimal literal in Java?

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.

What is a double literal in Java?

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.


1 Answers

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) 
like image 111
Jon Skeet Avatar answered Sep 22 '22 13:09

Jon Skeet