![](/user_photo/2706_HbeT2.jpg)
- •Мови програмування. Представлення даних.
- •1. Вступ. Про обчислювальну техніку.
- •2. Історія мов програмування.
- •3. Поняття про платформу .Net
- •4. Створення мови програмування с#.
- •5. Представлення даних. Необхідність типізації. Двійкова арифметика.
- •6. Основні поняття програмування.
- •Поняття про інтегроване середовище розробки VisualStudio (на прикладі Visual Studio 2005). Структура c#-програми.
- •1. Основні можливості інтегрованого середовища розробки VisualStudio .Net.
- •2. Структура програми мовою с#.
- •Int I; // Визначили цілу змінну
- •Основні елементи мови с#.
- •1. Основні вбудовані типи мови с#
- •2. Визначення та ініціалізація змінних, область їх видимості.
- •3. Приведення типів.
- •Інакше обидва операнди перетворюються до типу int;
- •4. Літерали (константи) мови с#.
- •5. Операції мови с#.
- •5.1. Арифметичні операції.
- •5.2. Операції інкременту та декременту.
- •5.3. Операції відношення (порівняння).
- •5.4. Логічні операції.
- •5.5. Порозрядні (бітові) операції.
- •5.6. Умовна (тернарна) операція.
- •5.7. Операції присвоєння.
- •5.8. Пріоритет операцій.
- •Основні інструкції керування мови с# – розгалуження та цикли.
- •1. Розгалуження у мові с#
- •2. Цикли у мові с#
- •2.1. Цикл for.
- •2.2. Цикл while.
- •2.3. Цикл do-while.
- •3. Керування виходом із циклів с#
- •Масиви в мові с#.
- •1. Визначення та ініціалізація масиву.
- •2. Цикл foreach
- •3. Багатовимірні масиви.
- •4. Використання деяких методів класу System.Array.
- •5. Масиви масивів. Непрямокутні масиви.
- •Структуровані типи даних (колекції) в мові c#
- •1. Основні структури даних та їх призначення
- •2. Використання списку ArrayList та узагальненого списку List
- •3. Використання асоційованого списку Hashtable та узагальненого словника Dictionary
- •Класи в мові с#.
- •1. Визначення класу.
- •2. Методи класу.
- •3. Методи з параметрами.
- •4. Конструктор класу.
- •Методи в мові с#.
- •1. Передача об’єктів методам.
- •2. Використання модифікаторів для параметрів методів.
- •3. Методи, що повертають об’єкти.
- •Перевантаження методів в мові с#.
- •1. Перевантаження методів.
- •2. Перевантаження конструкторів.
- •3. Використання ключового слова this.
- •4. Деструктор класу.
- •5. Метод Main ().
- •Статичні члени класу.
- •1. Статичні дані-члени класу.
- •2. Статичні методи-члени класу.
- •3. Статичний конструктор класу.
- •4. Статичні класи, локалізація та глобалізація
- •Властивості та індексатори.
- •1. Властивості.
- •2. Індексатори.
- •Спадкування в мові с#.
- •1. Поняття про спадкування та ієрархію класів.
- •2. Спадкування та правила доступу до членів класів.
- •3. Конструктори базового та похідних класів.
- •4. Посилання на екземпляри базового та похідних класів.
- •5. Поняття про поліморфізм.
- •6. Віртуальні функції – більш детальний погляд.
- •7. Абстрактні методи та класи.
- •Перевантаження операцій в мові с#.
- •1. Загальні відомості.
- •2. Перевантаження бінарних арифметичних операцій.
- •3. Перевантаження унарних операцій.
- •4. Перевантаження операцій відношення.
- •5. Перевантаження логічних операцій.
- •6. Підсумкові зауваження.
- •Структури та переліки в мові с#.
- •1. Структури.
- •2. Переліки.
- •Делегати, події та обробники подій
- •1. Делегати (delegate).
- •2. Події та їх обробники.
- •Атрибути та їх використання
- •Рекомендована література
5.4. Логічні операції.
Логічні операції виконуються над операндами логічного (булівського) типу та визначають результат логічного типу. Логічні операції мають дві форми: звичайну та скорочену. Розглянемо спочатку набір звичайних логічних операцій: (&) – логічне множення або логічне «І», (|) – логічне додавання або логічне «АБО», (^) – логічне виключне «АБО», (!) – логічне заперечення «НІ». Значення логічних операцій наведені нижче у таблиці для різних значень операндів (op1 та op2).
-
op1
op2
op1 & op2
op1 | op2
op1 ^ op2
!op1
true
true
true
true
false
false
true
false
false
true
true
false
false
true
false
true
true
true
false
false
false
false
false
true
Крім того, логічні множення та додавання мають ще скорочені форми, які позначаються знаками && та || відповідно. Ідея їх використання пов’язана з прискоренням логічних обчислень – обчислення логічного виразу, складеного із скорочених логічних операцій припиняється, якщо його значення стає визначеним. Наступний приклад демонструє різницю у використанні повної та скороченої форм логічних операцій.
using System;
namespace Logic_Operator
{
class Program
{
static void Main()
{
int i = 10, k = 100;
if (!(k > 10) && (++i < 100)) // Тут i не зміниться
// Цей оператор не виконується
Console.WriteLine(
"Скорочена форма &&: тут i не зміниться" );
Console.WriteLine("i = " + i.ToString());
i = 10; // Відновлюємо i
if (!(k > 10) & (++i < 100)) // Тут i зміниться
// Цей оператор не виконується
Console.WriteLine("Звичайна форма &: тут i зміниться");
Console.WriteLine("i = " + i.ToString());
}
}
}
5.5. Порозрядні (бітові) операції.
Порозрядні операції виконуються над відповідними бітами внутрішнього подання лише цілих операндів. Результатом виконання є ціле відповідного операндам типу. Таких операцій є 6 : (&) – порозрядне «І», тобто кон’юнкція бітів, (|) – порозрядне «АБО»,тобто диз’юнкція бітів, (^) – порозрядне виключне «АБО», (>>) – порозрядний зсув праворуч, (<<) – порозрядний зсув ліворуч, (~) – порозрядне заперечення. Всі операції, крім останньої, є бінарними. Слід зауважити, що при зсуві ліворуч (<<) на вказану правим операндом кількість позицій внутрішнє подання лівого операнду просто зсувається ліворуч, а позиції, що вивільняються, заповнюються нулями. При зсуві праворуч (>>) позиції, що вивільняються ліворуч, заповнюються нулями для беззнакового операнду, якщо ж зсув виконується для знакового операнду, то на вільні ліві позиції розповсюджується знаковий розряд, тобто для від’ємного числа вільні позиції ліворуч заповняться одиницями. Це обов’язково слід враховувати. У наведеній нижче таблиці вказані результати бітових операцій для різних значень операндів (op1 та op2).
-
op1
op2
op1 & op2
op1 | op2
op1 ^ op2
~op1
1
1
1
1
0
0
1
0
0
1
1
0
0
1
0
1
1
1
0
0
0
0
0
1
Наступний приклад демонструє можливості операцій над бітами.
using System;
namespace Bits_Operators
{
class Program
{
static void Main()
{
int x = 5, y = 6, z;
z = x & y; // Логічне множення "I"
Console.WriteLine("x = {0} y = {1} x & y = {2}",x,y,z);
z = x | y; // Логічне додавання "АБО"
Console.WriteLine("x = {0} y = {1} x | y = {2}",x,y,z);
z = x ^ y; // Логічне виключне "АБО"
Console.WriteLine("x = {0} y = {1} x ^ y = {2}",x,y,z);
z = x << 1; // Зсув на 1 позицію ліворуч
Console.WriteLine("x = {0} x << 1 = {1}", x, z);
z = x >> 1; // Зсув на 1 позицію праворуч
Console.WriteLine("x = {0} x >> 1 = {1}", x, z);
z = ~y; // Логічне заперечення "НІ"
Console.WriteLine("y = {0} ~y = {1}", y, z);
z = y | 0X7; // Встановлюємо одиниці в останні 3 розряди
Console.WriteLine("y = {0} y|0X7 = {1}", y, z);
z = x & ~0X7; // Встановлюємо нулі в останні 3 розряди
Console.WriteLine("x = {0} x&~0X7 = {1}", x, z);
}
}
}
Виконання цієї програми приведе до наступних результатів:
x = 5 y = 6 x & y = 4
x = 5 y = 6 x | y = 7
x = 5 y = 6 x ^ y = 3
x = 5 x << 1 = 10
x = 5 x >> 1 = 2
y = 6 ~y = -7