
- •Кодування
- •Аналіз програми
- •1.2.1. Пробіли
- •1.2.2. Коментарі
- •1.2.3. Лексеми
- •Види лексем
- •Ідентифікатори
- •Ключові слова
- •Літерали
- •Цілочислові літерали
- •Дробові літерали
- •Логічні літерали
- •Символьні літерали
- •Рядкові літерали
- •Nullлітерал
- •Розділювачі
- •Оператори
- •Висновки
- •Доповнення: Робота з операторами
Літерали
Літерали дозволяють задати в програмі значення для числових, символьних и рядкових виразів, а також null-літералів. В Java визначені такі види літералів:
цілочисловий (integer):
дробовий (floating-point);
булевий (boolean);
символьний (character);
рядковий (string);
null-літерал(null-literal).
Цілочислові літерали
Цілочислові літерали дозволяють задавати цілочислові значення в десятковому, вісімковому і шістнадцятковому виді. Десяткова форма традиційна. Значення у вісімковому вигляді починаються з нуля і використання цифр 8 та 9 заборонено. Записи шістнадцяткових чисел починаються з 0xабо 0X (цифра 0 і латинська ASCII-букваX в довільному регістрі). Отже, нуль можна записати трьома різними способами:
0
00
0x0
Зазвичай, для запису 10-15 в шістнадцятковій формі використовуються буквиA, B, C, D, E, F, великі або малі. Приклади таких літералів:
0xaBcDeF, 0xCafe, 0xDEC
Типи
даних розглядаються нижче, однак вкажемо
два цілочислових типи int
іlong
довжиною 4 і 8 байтів відповідно (або 32
і 64 біти відповідно). Обидва ці типи
знакові, тобто тип int
зберігає значення від
до
або
від -2147483648 до 2147483647. За замовчуванням
цілочисловий літерал має тип int,
а значить, в програмі припустимо
використовувати тільки від 0 до 2147483648,
інакше виникне помилка компіляції. При
цьому літерал 2147483648можна використовувати
як аргумент унарного оператора –.
intx =– 2147483648; //
inty =5 – 2147483648; //
Відповідно,
припустимі літерали у вісімковому
записові повинні бути від 00 до 017777777777
(=
),
з унарним оператором – допустимо також
–020000000000
(=–
).
Аналогічно для шістнадцяткового формату
– від 0x0
до 0x7fffffff
(=
),
а також – 0x80000000
(= –
).
Тип
long
має довжину 64 біти, а значить, дозволяє
зберігати значення від
до
.
Щоб ввести такий літерал, потрібно в
кінці поставити латинську буквуL
абоl,
тоді всі значення трактуватимуться
якlong.
Аналогічно можна виписати максимально
припустимі значення для них:
9223372036854775807L
0777777777777777777777L
0x7fffffffffffffffL
// найменші від’ємні значення:
–9223372036854775808L
–01000000000000000000000L
–0x8000000000000000L
Інші приклади цілочислових літералів типу long:
0L, 123l, 0xC0B0L
Дробові літерали
Дробові літерали – числа з плаваючою десятковою крапкою. Правила запису таких чисел такі ж, як і в більшості сучасних мов програмування. Приклади:
3.14
2.
.5
7e10
3.1E–20
Отже, дробовий літерал складається з таких складових частин:
ціла частина;
десяткова крапка (використовується АSCII-символ точка);
дробова частина;
показник степеня (складається з латинської ASCII-буквиEв довільному регістрі і цілого числа з опціональним знаком + або –);
закінчення-вказівник типу.
Ціла і дробова частини записуються десятковими цифрами, а вказівник типу (аналог вказівника L абоl для цілочислових літералів типу long) має два можливих значення – латинська ASCII-буква D (для типу double) або F (для типу float) в довільному регістрі.
Необхідними частинами є:
хоча б одна цифра в цілій або дробовій частинах;
десяткова точка або показник степеня або вказівник типу.
Усі інші частини необов’язкові. Отже, “мінімальні” дробові літерали можна записати, наприклад, так:
1.
.1
1e1
1f
У Java є два дробових типи, згадані раніше, – float іdouble. Їх довжина – 4 і 8 байтів або 32 і 64 біти відповідно. Дробовий літерал має типfloat, якщо закінчується на латинську букву F в довільному регістрі. В противному випадку він розглядається як значенняdoubleи може закінчуватися D абоd, як ознакою типу double (це може використовуватися тільки для наглядності).
// float-літерали:
1f, 3.14F, 0f, 1e+5F
// double-літерали:
0., 3.14d, 1e-4, 31.34E45D
В Java дробові числа 32-бітового типуfloat 64-бітового типуdouble зберігаються в памм’яті в бінарному вигляді у форматі, стандартизованому специфікацієюIEEE 754 (повна назва – IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985 (IEEE, New York)). У цій специфікації описані не тільки скінченні дробові величини, але й ще кілька особливих значень, а саме:
додатна і від’ємна безмежності (positive/negative infinity);
значення “не число”, Not-a-Number, або скороченоNaN;
додатний і від’ємний нулі.
Для цих значень немає спеціальних позначень. Щоб одержати такі величини необхідно або виконати арифметичну операцію (наприклад, результатом ділення нуль на нуль 0.0/0.0 будеNaN), або звернутися до сталих в класахFloat іDouble, а самеPOSITIVE_INFINITY, NEGATIVE_INFINITY іNaN.
Типи даних накладають певні обмеження на можливі значення літералів, як і для цілочислових типів. Максимальне скінченне значення дробового літералу:
для float: 3.40282347e+38f
для double 1.79769313486231570e+308
Крім цього, для дробових величин стає важливим ще одно граничне значення – мінімальне додатне ненульове значення:
для float:1.40239846e-45f
для double:4.94065645841246544e-324
Спроба вказати літерал з надто великим абсолютним значенням (наприклад, 1e40f) зумовить помилку компіляції. Така величина повинна представлятися безмежністю. Аналогічно, спроба вказати літерал з надто малим ненульовим значенням (наприклад, 1e-350) зумовлює помилку. Це значення треба заокруглити до нуля. Однак, якщо заокруглення відбувається не до нуля, то компілятор здійснить його сам:
// помилка, вираз повинен бути заокруглений до 0
0.0000000000000000000000000000000000000000000001f
// помилки немає, компілятор сам заокруглює до 1
1.0000000000000000000000000000000000000000000001f
Стандартних можливостей вводити дробові значення не в десятковій системі в Java нема, однак класиFloat іDouble надають багато допоміжних методів, в тому числі й для такої задачі.