- •1.2. Алгоритм
- •1.3. Предмет науки програмування
- •1.4. Застосування мов програмування
- •1.5. Стандартизація мов програмування
- •1.6. Середовище розробки
- •1.7. Тестування і верифікація програм
- •Лекція 2. Алгоритми і обчислення
- •2.1. Алгоритми
- •2.2. Обчислювальні машини
- •2.3. Основи фон-нейманівської архітектури
- •Лекція 3. Парадигми програмування
- •3.1. Базові парадигми програмування
- •Процедурне програмування
- •Абстрактна семантика процедурних програм.
- •Денотаційна семантика.
- •Операційна семантика
- •Структурність і модульність
- •3. 3. Модульне програмування
- •3.4. Об’єктно-орієнтовне програмування
- •3.5. Функціональне програмування
- •3.6. Логічне програмування
- •3.6. Алгебраїчна парадигма
- •Висновок
- •Лекція 4. Огляд основних мов програмування
- •4.1. Мова Picmkalkul Конрада Цузе
- •4.1.1. Історичні передумови
- •4.1.2. Огляд мови
- •4.2. Мінімальне програмування на апаратному рівні: псевдокоди
- •4.2.1. Мова Short Code
- •4.2.2. Система Speedcoding
- •4.2.3. Система "компіляції" univac
- •4.2.4. Суміжна робота
- •4.3. Комп'ютер ibm 704 і мова fortran
- •4.3.1. Історична ретроспектива
- •4.3.2. Процес розробки
- •4.3.3. Огляд мови fortran I
- •4.3.4. Огляд мови fortran II
- •4.3.5. Мови fortran IV, fortran 77 і fortran 90
- •4.4. Функціональне програмування: мова lisp
- •4.4.1. Витоки робіт в області штучного інтелекту та обробка списків
- •4.4.2. Процес розробки мови lisp
- •4.4.3. Огляд мови
- •4.4.5. Два нащадки мови lisp
- •4.4.6. Споріднені мови
- •4.5. Перший крок до удосконалення: мова algol 60
- •4.5.1. Історична ретроспектива
- •4.5.2. Початкова стадія розробки
- •4.5.3. Огляд мови algol 58
- •4.5.4. Прийняття звіту про мову algol 58
- •4.5.5. Процес розробки мови algol 60
- •4.5.6. Огляд мови algol 60
- •4.5.7. Оцінка мови algol 60
- •Лекція 5. Трансляція і формальні граматики
- •5.1. Транслятори
- •5.2. Процес трансляції
- •5.3. Формальні граматики. Нбф-граматика
- •Лекція 6. Java - мова ооп
- •6.2. Основні властивості програм і перші приклади
- •6.3. Арифметичні і побітові оператори мови Java
6.3. Арифметичні і побітові оператори мови Java
До арифметичним операторам мови Java, які визначені для всіх числових типів, відносяться: + (додавання і унарний плюс), + = (додавання з привласненням), - (віднімання і унарний мінус), -= (віднімання з привласненням), * (множення ), *= (множення з привласненням), / (ділення), / = (поділ з привласненням),% (залишок від ділення або ділення по модулю),% = (залишок від ділення з привласненням), + + (інкремент) і - (декремент).
Будь-який оператор з привласненням з точки зору одержуваного результату еквівалентний виконання відповідної операції з подальшим привласненням, але працює зазвичай швидше: @ = B еквівалентно а = @ B (тут символ @ означає будь-яку з бінарних арифметичних операцій).
Результат виконання операцій ділення і ділення за модулем (знаходження залишку) для цілочисельних операндів є цілим числом. Так, наприклад, 5/3 дорівнює 1. Нарешті, операції інкремента і декремента відповідно збільшують і зменшують свій операнд на одиницю. Вони бувають префіксним і тоді зміна їх операнда відбувається до того, як виконуються інші дії у виразі, і постфіксні, коли зміна відбувається після обчислення виразу:
int i = 2, j = 3; // i = 2, j = 3
int k = i + j++; // k = 5, j = 4
int m = --i; // i = 1, m = 1
З величинами цілих типів можна виконувати додаткові дії. До побітових (або порозрядним) операторів мови Java належать такі: ~ (доповнення), & (побітове І), і = (побітове І з привласненням), | (побітове Або), | (побітове Або з привласненням), ^ (виключає Або ), ^ = (виключає Або з привласненням), <<(зсув вліво), <<= (зрушення вліво з привласненням),>> (зсув вправо),>> = (зсув вправо з привласненням ),>>> (зсув вправо з розмноженням нуля) і>>> = (зсув вправо з привласненням з розмноженням нуля).
Результати операцій побітового доповнення, Або, що виключає Або і І виходять шляхом виконання над кожним з бітів операнда (операндів) дій відповідно до таблиці 6. Таблиця 6: Бітові операції
a |
b |
~a |
a|b |
a^b |
a&b |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
Наприклад, 4 ~ 5 дорівнює 1 (бо виконавчі подання цих чисел є відповідно 100 і 101). В операторів зсуву другий аргумент показує кількість розрядів, на яке треба здійснити зрушення в двійковому представленні першого операнда вл.іво (для <<) або вправо (для>> і >>>).
int i = 3, j = 100; // i = 3, j = 100
int k = i << 4; // k = 48
int m = j >> 2; // m = 25
Легко
зрозуміти, що зрушення вліво на розрядів
еквівалентний множенню на
,
а зрушення вправо - поділу на те ж число.
Задачи для самостійного рішення
