Особливості роботи з типами

Содержание

Слайд 2

Особливості роботи з цілими типами Аргумент дорівнює найменшому можливому значенню примітивного

Особливості роботи з цілими типами

Аргумент дорівнює найменшому можливому значенню примітивного типу
int

x=-2147483648;
int y=-x;
Результат y==x и x == -x – true
Переповнення
int x= 300000;
print(x*x);
Результат -194313216
Слайд 3

Розширення типів Вираз int i = 300000; print (i * i);

Розширення типів

Вираз
int i = 300000; print (i * i); // Множення

з точністю 32 біта
long m = i; print (m * m); // Множення з точністю 64 біта
print (1 / (m-i)); // Спробуємо отримати різницю значень int та long
Результат
-194313216
90000000000
Помилка ділення на нуль
double x = 1/2; - Помилковий результат
Кількість мілісекунд у місяці
print (1000 * 60 * 60 * 24 * 30) - результат -1702967296
Помилка компіляції
byte b = 5;
byte c = -b;
Слайд 4

Правила розширення цілочисельних типів Якщо хоча б один аргумент операції має

Правила розширення цілочисельних типів

Якщо хоча б один аргумент операції має тип

long, то всі аргументи приводяться до цього типу і результат операції також буде типу long.
Обчислення буде вироблено з точністю в 64 біта, а більш старші біти, якщо з'являються в результаті, відкидаються.
Якщо ж аргументів типу long немає, то обчислення проводиться з точністю в 32 біти, і всі аргументи перетворяться в int (byte, short, char також). Результат теж int. Всі біти старше 32-го ігноруються.
Немає способу дізнатися, чи відбулося переповнення.
Слайд 5

Особливості роботи з дробовими типами Дробові обчислення взагалі не породжують ніяких

Особливості роботи з дробовими типами

Дробові обчислення взагалі не породжують ніяких помилок!
Спеціальні

значення дробового типу:
позитивна і негативна нескінченності (positive / negative infinity);
1f / 0f - позитивна нескінченність, тип float
-1d / 0d - негативна нескінченність, тип double
значення "не число", Not-a-Number, скорочено NaN;
0.0 / 0.0 - ділення нуль на нуль
(1.0 / 0.0) * 0.0 - множення нескінченності на нуль
позитивний і негативний нулі.
0.0
+0.0
-0.0
0.0 == - 0.0 - true
0.0> -0.0 - false
Слайд 6

Правила розширення дробових типів Якщо хоча б один аргумент має тип

Правила розширення дробових типів

Якщо хоча б один аргумент має тип double,

то значення всіх аргументів приводяться до цього типу і результат операції також матиме тип double. Обчислення буде здійснене з точністю в 64 біта.
Якщо ж аргументів типу double немає, а хоча б один аргумент має тип float, то всі аргументи приводяться до float, обчислення проводиться з точністю в 32 біта і результат має тип float.
Якщо хоча б один з аргументів має значення NaN, то і результатом операції буде NaN.
Слайд 7

Приведення примітивних типів даних Приведення типів дозволяє конвертувати значення примітивів з

Приведення примітивних типів даних

Приведення типів дозволяє конвертувати значення примітивів з одного

типу в інший.
Приведення типів (casting) може бути неявним (implicit) і явним (explicit).
Слайд 8

Неявне приведення типів При неявному приведенні типів немає необхідності писати код

Неявне приведення типів

При неявному приведенні типів немає необхідності писати код для

кастингу: конвертування відбувається автоматично.
Зазвичай неявне приведення типів відбувається при розширенні діапазону значень.
Наприклад, присвоювання значення змінної з меншим діапазоном значень, наприклад byte в контейнер з більш широким діапазоном, наприклад int.