Історія мов програмування


Скачати 2.03 Mb.
Назва Історія мов програмування
Сторінка 2/17
Дата 05.04.2013
Розмір 2.03 Mb.
Тип Документи
bibl.com.ua > Інформатика > Документи
1   2   3   4   5   6   7   8   9   ...   17

Вбудовані типи мови C#

Мова С# – це мова жорстокої типізації. Це означає, що кожний об’єкт в програмі має відноситись до одного з визначених типів. Всі типи даних, що використовуються в С#, діляться на 2 категорії типи-значень (value types) та типи-посилання (reference types). Про відмінності між ними говорилось раніше, а зараз розглянемо основні вбудовані типи мови С#. Вони представлені у таблиці 1.




Назва типу

Назва системного типу

Опис типу

Розмір у бітах

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

1

bool

Boolean

логічний

8

false, true

2

byte

Byte

8-розрядний цілий без знаку

8

0 255

3

sbyte

SByte

8-розрядний знаковий цілий

8

-128 +127

4

short

Int16

короткий знаковий цілий

16

-32 768 +32787

5

ushort

UInt16

короткий цілий без знаку

16

0 65535

6

int

Int32

знаковий цілий

32

-2 147 483 648

+2 147 483 647

7

uint

UInt32

цілий без знаку

32

0 +4 294 967 295

8

long

Int64

довгий знаковий цілий

64

-9 223 372 036 854 775 808

+9 223 372 036 854 775 807

9

ulong

UInt64

довгий цілий без знаку

64

0

+18 448 744 073 709 551 615

10

float

Single

дійсний

32

1,401298Е-45 3,402823Е+38

11

double

Double

дійсний подвоєної точності

64

Е-324 Е+308

12

decimal

Decimal

числовий для фінансових розрахунків

96

29 значущих розрядів

13

char

Char

символьний

16




14

string

String

Набір символів Unicode









  1. Правила приведення типів в мові C#

Розберемось, як мова С# суміщає у виразах змінні різних типів, тобто як відбувається перетворення типів, адже відомо, що у всіх виразах та операціях повинні використовуватись змінні однакових типів. З цією метою розглянемо наступний приклад.

using System;

namespace Convert_of_variables_1

{

class Program

{

static void Main()

{

float f = 0;

double x = f; // таке присвоєння припустиме

f = x; // а таке – ні

f = (float)x; // явне приведення типу

Console.WriteLine("f = " + f.ToString());

Console.WriteLine("x = " + x.ToString());

}

}

}

Змінній x типу double можна присвоїти значення змінної менш «потужного» типу, наприклад, типу float, тому що компілятор С# виконує неявне приведення типу (implicit convert), а от розраховувати, що автоматично буде виконане зворотне перетворення – неможливо. Адже при присвоєнні значень більш потужного типу змінній менш потужного типу можливі втрати інформації. Відповідальність за виконання таких операцій в разі їх потреби програміст повинен взяти на себе, необхідно виконати явне приведення типу (explicit convert). Така операція записується інструкцією:

(тип_до_якого_приводимо_вираз)вираз;

При обчисленні виразів, які містять операнди різних типів всі вони приводяться (звісно, якщо типи сумісні між собою) до найбільш широкого типу. Таке перетворення виконується неявним чином при дотриманні низки правил «просування по сходинках типів». При звуженні потужності типу завжди потрібне явне приведення типу. Правила просування є такими:

1. якщо один із операндів має тип decimal , то і другий буде приводитись до такого типу (але якщо другий операнд мав тип float або double, результат буде помилковим);

2. якщо один із операндів має тип double, то і другий буде приводитись до такого типу double;

3. якщо один із операндів має тип float, то і другий буде приводитись до типу float;

4. якщо один із операндів має тип ulong, то і другий буде приводитись до типу ulong (але якщо другий операнд мав цілий знаковий тип, результат буде помилковим);

  1. якщо один із операндів має тип long, то і другий буде приводитись до типу long;

  2. якщо один із операндів має тип uint, а другий має тип sbyte, short або int , то обидва операнди будуть приведені до типу long;

  3. якщо один із операндів має тип uint , то і другий буде приводитись до типу uint;

  4. інакше обидва операнди перетворюються до типу int;

Останнє правило пояснює, чому в наступному коді виникає помилка.

using System;

namespace Convert_of_variables_2

{

class Program

{

static void Main()

{

byte b1 = 16, b2 = 32;

// нижче виникає помилка, оскільки згідно правилу 8,

// результат має тип int

byte b = b1 + b2;

Console.WriteLine("b = " + b.ToString());

}

}

}

Щоб код успішно компілювався та працював, треба виконати явне приведення результату до типу byte , який має змінна b:

byte b = (byte)(b1 + b2); // так правильно!


  1. Константи(літерали) в мові C#

В мові С# літералом називається деяке фіксоване значення. Іншими словами це таке значення, яким можна ініціалізувати змінну, присвоїти константі тощо. Літерали можуть мати довільний допустимий тип значень. Тип літерала визначається згідно певних правил. Цілий літерал не містить десяткової крапки чи знаку порядку. Автоматично відноситься до найменшого знакового цілого типу, починаючи із типу int, до множини значень якого входить літерал. Тобто літерали 25, -10 мають тип int, а літерал 3 333 333 333 має тип long. Якщо потрібно віднести цілий літерал до іншого типу, треба це явно вказати, додавши один із суфіксів безпосередньо після літералу: символи U або u для літералу беззнакового типу, символи L або l для довгого цілого. Таким чином, 1L – це літерал типу long, 1U – типу uint, а 1UL – типу ulong.

Можна визначити також шістнадцятковий літерал, він починається із префіксу 0X або 0x. Тобто 0XFFFF та 0x11111 – шістнадцяткові літерали.

Літерал, який містить десяткову крапку або знак порядку відноситься до типу double. Якщо необхідно, щоб він мав тип float, додається суфікс F. Отже, літерал 1.5 має тип double, а літерал 1.5F – тип float.

Літерал типу decimal позначається суфіксом М, наприклад, 1.5М.

Символьний літерал задається в одинарних лапках, а рядковий (стрінговий) літерал у подвійних лапках: ‘A’ та “A” – це різні літерали, які відносяться до різних типів.

До символьних літералів відносяться і так звані esc-послідовності. Вони зображуються двома символами у одинарних лапках, перший з яких \. Наприклад, ‘\n’ ‘\t – це символи переходу на новий рядок та табуляції. Особливу роль відіграє так званий нуль-символ ‘\0. Для позначення лапок подвійних та одинарних, а також самого знаку \ використовується esc-послідовності ‘\”’ , ‘\’’ та ‘\\’ відповідно. Таким чином, якщо в програмі є інструкція

Console.WriteLine("Це \tприклад \n\”ESC-послідовності\”);

на екрані ми побачимо:

Це приклад

ESC-послідовності

Зауваження. Замість символу \n для переходу на новий рядок можна використовувати рядок Environment.NewLine.

Цікавий ще один нюанс, який відрізняє текстові літерали мов С++ та С#. Якщо перед текстовим літералом стоїть знак @, то такий літерал називається буквальним і при зображенні на екрані виглядає дослівно так само, як у подвійних лапках. Таким чином зникає потреба у використанні знаків табуляції, нового рядку тощо. Єдиний виняток проти «буквальності» – сам знак подвійних лапок, якщо він зустрічається у літералі, має бути подвоєним. Нижче наведений приклад використання буквального (virbatim) літералу.

using System;

namespace Virbatim_Literal

{

class Program

{

static void Main()

{

Console.WriteLine(@"Це

буквальний літерал, а це -

"" "" - подвійні лапки у ньому;

' ' - одинарні лапки у ньому ");

}

}

}

Після запуску побачимо на екрані наступний текст:

Це

буквальний літерал, а це -

" " - подвійні лапки у ньому;

' ' - одинарні лапки у ньому



  1. Основні операції мови C#

Розглянемо основні групи операцій, завдяки яким в мові С# забезпечується можливість виконання широкого спектру обчислень.

Арифметичні операції.

Арифметичні операції: (+) – додавання, (-) – віднімання, (*) – множення, (/) – ділення, (%) – визначення залишку від ділення – є бінарними операціями і виконуються над операндами довільних цілих та дійсних чисел, формуючи результат, тип якого визначається правилами «просування по сходинках типів».

Зауваження.

  1. Операція % в мові С# може виконуватись і над операндами дійсних типів.

  2. При виконанні операції / над операндами цілих типів залишок буде відкинутий, тобто 5/2 дає результат 2.

Операції інкременту та декременту.

Унарні операції інкременту (++) та декременту (--) викликають відповідно збільшення або зменшення операнду дійсного або цілого типу на одиницю. Фактично, ці операції задають неявне присвоєння нового значення змінній. Цікавості та певної загадковості цим операторам надає можливість різного часу виконання. А саме, вони мають префіксну форму (коли знак операції ++ чи -- записується перед змінною) та постфіксну форму (коли знак операції ++ чи -- записується після змінної). В обох випадках змінна, до якої застосована операція інкреметну або декременту, буде збільшена або зменшена на одиницю, проте при префіксній формі ці зміни відбудуться перед використанням змінної у виразі, а при постфіксній формі – після використання змінної у виразі. Розглянемо приклад, що демонструє ці особливості.

using System;

namespace Increment_and_Decrement

{

class Program

{

static void Main()

{

int x = 1, y;

y = x++;

Console.WriteLine("x = {0} y = {1}", x, y);

x = 1;

y = --x;

Console.WriteLine("x = {0} y = {1}", x, y);

}

}

В результаті на екрані побачимо :

x = 2 y = 1

x = 0 y = 0

Тобто обчислення виразу y = x++; відбувається у два етапи : спочатку y = x; а потім x = x++;. З префіксною формою все більш очевидно. Спробуйте визначите, що буде на екрані в результаті виконання наступного фрагменту коду:

x = 1;

y = x++ + ++x;

Console.WriteLine("x = {0} y = {1}", x, y);

Операції відношення (порівняння).

Бінарні операції відношення : (==) – перевірка на рівність, (!=) – перевірка на нерівність, (>) – перевірка чи більший перший операнд за другий, (>=) – перевірка чи не менший перший операнд за другий, (<) – перевірка чи менший перший операнд за другий, (<=) – перевірка чи не більший перший операнд за другий. Кожна з цих операцій формує значення true або false в залежності від результату порівняння. Мова С# дозволяє перевіряти на рівність або нерівність довільні об’єкти, тобто ці операції застосовні до всіх типів. Решту ж порівнянь можна виконувати лише над операндами тих типів, які підтримують операцію відношення порядку, тобто лише до числових типів. Розглянемо приклад:
1   2   3   4   5   6   7   8   9   ...   17

Схожі:

Програма курсу програмування на мов і С++
Курс націлений на отримання знань і практичних навиків програмування на мовах C і C + + в рамках процедурно-орієнтованого програмування....
Основні методології (стилі, парадигми) програмування. Поняття програми....
Дів розробки програм Граді Буча “О’єктно-орієнтоване програмування (ООП) – це методологія програмування, яка заснована на представленні...
Курс програмування на С #
Зусилля, які ви витратите на вивчення С #, будуть винагороджені, так як Сі Шарп був розроблений в якості основної мови програмування,...
27. Процедурні мови програмування
Процедурні мови програмування. Характеристика процедурних мов програмування. Алфавіт. Основні поняття мови: числа, рядки, ідентифікатори,...
27. Методика навчання обєктно-орієнтованого програмування. Об'єктно́-орієнтоване́...
Не зважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. На сьогодні багато...
29. Опис та використання підпрограм
Реалізація базових алгоритмічних структур процедурною мовою програмування. Опис процедур та функцій процедурною мовою програмування....
2. Дробово-лінійне програмування Постановка задачі дробово-лінійного...
Дослідження операцій”, “Економетрія”, “Моделювання економіки”, “Економічна кібернетика” а також дисциплін циклу загальноекономічної...
Методичні рекомендації щодо вивчення інформатики у 2012-2013 навчальному році
Особливо гостро стоїть питання поглибленого вивчення інформатики та сучасних мов програмування
ПОРЯДОК проведення відкритої Всеукраїнської студентської олімпіади з програмування
Першості світу) з програмування АСМ-ICPC (Association for Computing Machinery International Collegiate Programming Contest), яка...
1. Українська мова належить до: а східнослов’янської підгрупи мов;...
Яке з поданих слів має значення „спрямований вперед; який рухається у висхідному напрямі”
Додайте кнопку на своєму сайті:
Портал навчання


При копіюванні матеріалу обов'язкове зазначення активного посилання © 2013
звернутися до адміністрації
bibl.com.ua
Головна сторінка