Я читал книгу о Java, и я нашел следующие моменты неясными, пожалуйста, помогите мне:
Для целочисленного литерала, выраженного в любой базе, отличной от базы 10 (0b, 0, 0x), можно использовать суффикс L, который обозначает Long?
Для с плавающей запятой мы можем использовать любую другую базу, отличную от десятичной? Если да, мы можем указать float или double, используя F или D для других баз, кроме 10? Если да, с другими основаниями, чем 10, мы можем использовать научную нотацию или разрешить только десятичную точку?
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
.
SignedInteger
в десятичном формате. «двоичный» означает базу 2 в этом случае.