Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
26.03.2016
Размер:
1.4 Mб
Скачать

3.1. Змінні

Будь-яка програма працює з об'єктами, які називаються змінними (в даному випадку - це іменник). У програмуванні поняття змінної трактується дещо ширше чим в математиці. Визначимо це поняття так: змінна - цей деякий простір пам'яті, якому присвоєне ім'я і в яке можуть поміщатися певні дані. Кожного разу різні. У цьому сенсі простір увесь час може містити різні дані. Ім'я такого простору і називають змінною. Але дані бувають дуже різні. Наприклад, цілі числа, або дробові, або текст, або особова картка працівника, або цілий завод і т. д. І під кожне таке дане потрібно виділяти відповідну йому пам'ять. Як повинен поступати компілятор програми, якщо програма стане працювати з такими даними? Напевно, дані потрібно якось уміти розрізняти за їх типом. Наприклад, цілі числа відрізняються від нецілих чисел, особова картка працівника взагалі містить різнотипні дані (прізвище, професію, дані щодо зарплати, премій і т. д.). А про завод і говорити нічого. Тобто фактично дані відрізняються одне від іншого за своєю структурою. Тому для цілих чисел потрібно виділяти один обсяг пам'яті, для дробових - інший, для карточки - третій і т. д. Та і спосіб обробки цих різних структур абсолютно різний: для множення двох цілих чисел їх потрібно просто перемножити, а двох нецілих (а ще гірше: одне ціле, а інше дробове) вже просто перемножити не пройде: їх потрібно представити в спеціальному вигляді (мантиса і порядок), потім дещо зробити з цими частинами, потім ще дещо і т. д. Тому якщо кожен вигляд даного типізувати, т. т. визначити йому його тип, тоді вже можна, дивлячись на тип даного, знать, скільки йому потрібно виділити пам'яті, які операції можна проводити з даними цього типу, які результати і якого типу можуть бути отримані і т. д. Тоді при компіляції програми компілятор подивиться на тип даного і все розставить по своїх місцях. Наприклад, цілому числу виділить чотири байти пам'яті, дробовому - вісім, під рядок тексту - стільки-то. І якщо в програмі стануть порівнюватися два рядки, компілятор правильно побудує ділянку коду програми, виходячи з того, що порівнюються саме рядки даних. Коротше кажучи, щоб працювати з даними в програмі, потрібно задавати типи цих даних та імена цих даних. Тобто описувати, як то кажуть, ці дані в програмі. Або ще кажуть: оголошувати дані, що те ж саме.

У C# прийнято оголошувати дані, в загальному випадку так: "тип ім'я даного". Типи даних бувають різні: одні задані раз і назавжди в самій мові (базові типи), інші програміст сам задає (наприклад, структури, класи, об'єкти). Базовим типам зіставлені фіксовані ключові слова, небазові типи програміст сам іменує.

3.2. Тип цілочисельних даних

У таблиці 3.1 приведені різні типи даних для цілих чисел: хоча всі числа цілі, але залежно від типу їм виділяється різний обсяг пам'яті.

Таблиця 3.1. Розмір і діапазон цілочисельних типів в C#

Тип

Розмір (байт)

Діапазон значень

Як використати (оголошення та ініціалізація змінної)

sbyte

1

Від - 128 до +128

sbyte sb=12;

byte

1

Від 0 до 255

byte b=12;

short

2

Від - 32 768 до +32 767

short si=-12;

ushort

2

Від 0 до 65 535

ushort us=12;

int

4

Від - 2 147 483 648 до +2 147 483 647

int i=-14;

uint

4

Від 0 до 4 294 967 295

uint ui=14;

long

8

Від - 9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

long lg=-14;

ulong

8

Від 0 до 18 446 744 073 709 551 615

ulong ul=14;

Тут потрібно дещо пояснити.

sbyte - байт з урахуванням знаку. Знаковий розряд завжди розташовується у старшому (нульовому - рахунок йде зліва направо) розряді (біті). У байті - 8 розрядів(бітів). Тому мінімальне число, яке може поміститися в таку пам'ять, - це –27, т. т. -128 (потрібно усі розряди пам’яті виставити в одиниці). Таким же методом обчислюються й інші діапазони.

Буква u перед типом означає unsigned, т. т. беззнаковий. Тому старший розряд виділеної пам'яті бере участь у розмірі числа. Для пам’яті розміром у байт отримаємо мінімум, коли всі біти нульові, т. т. нуль. А максимум - коли усі біти в одиниці. Тобто 28 - 1 = 256 - 1 = 255. Чому 28 - 1? Коли ви встановите усі вісім бітів в 1, додайте до них 1 в молодший розряд і відніміть ту ж одиницю (число ж не повинно змінитися). Коли додасте за правилами двійкового додавання, то отримаєте те, що і було потрібне.

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

тип_змінної ім’я_змінної

Додана тільки ініціалізація змінної, т. т. присвоєння їй початкового значення. Присвоєння відбувається за допомогою операції = ,яка читається так: присвоїти вміст правої частини виразу лівій частині. Це не знак рівності. Це - присвоєння. Компілятор подібний вираз перетворить в команду пересилання вмісту правої частині за адресою, де розміщена змінна лівої частини виразу. Ми вже вживаємо слово "вираз", хоча його і не визначали. Вираз - це змінні, сполучені між собою знаками операцій. Наприклад, m > n - вираз.