2015-03-19 3 views
1

Я читал книгу о Java, и я нашел следующие моменты неясным, пожалуйста, помогите мне:Числовых литералы

  1. Для целочисленного литерала выражен в любой системе счисления, кроме основания 10 (0b, 0, 0x) может мы используем суффикс L, который обозначает Long?

  2. Для плавающей запятой мы можем использовать любую другую базу, отличную от десятичной? Если да, мы можем указать float или double, используя F или D для других баз, кроме 10? Если да с другими основаниями, чем 10, мы можем использовать научную нотацию или разрешено только десятичная точка?

+2

Почему бы не попробовать себя? –

+0

Я попробовал двоичные плавающие точки, но у меня было сообщение от компилятора: Бинарные литералы могут использоваться только с уровнем 1,7 или выше, что это значит –

+0

1) мы могли бы использовать L с целыми литералами в других базах, я пришел к выводу, что попробовав это сам, но 2) мы не можем выразить литерал с плавающей запятой в других базах, это было результатом моих предложений теперь ... это кажется логичным для вас? я хочу только убедиться в моих результатах –

ответ

2

1) Да, это также возможно для шестнадцатеричных, восьмеричных и двоичных. См jls-3.10.1

2) Да, вы можете использовать шестнадцатеричные, но вы ограничены бинарные показатели и определение показателя степени требуется. См jls-3.10.2

Примеры:

0xFF.Ap0d 
0xFF.1p0f 
0xFF.Ap1d 
0xFF.Ap-1f 
0xFF.Ap-1 
0x.1p16 

Если вы печатаете эти литералы с помощью System.out.println, вы получите:

255.625 
255.0625 
511.25 
127.8125 
63.90625 
4096.0 

Значение двоичного показателя выглядит следующим образом:

значение в спереди p или P умножается на 2^z где z является целым числом после p (или P). Целое число находится в десятичном формате. Например. 0xFF.1Ap0101d означает 255.1015625 * 2^101.

+0

спасибо, но я не понимаю двоичную часть экспонента в 2) ....., BinaryExponent: BinaryExponentIndicator SignedInteger SignedInteger здесь относится к тому, что только цифры 0,1? мы можем написать, например, 0xFF.1Ap0101d –

+0

@Eng_Boody: Я отредактировал свой ответ. 'SignedInteger' находится в десятичном формате. «двоичный» означает * base 2 * в этом случае. – fabian

+0

Вы имеете в виду 0xFF.1Ap0101d означает 255.26 * 2^101 ?? не 255,635 * 2^101 ?? –