C#. Базові типи даних мови C#




Базові типи даних мови C#


Зміст


Пошук на інших ресурсах:

1. Які є основні (базові) типи даних в мові C#?

У мові C# реалізовані наступні базові типи даних:

  • Цілочисельні типи: sbyte, byte, short, ushort, int, uint, long, ulong.
  • Типи, в яких зберігаються дані з плаваючою комою (дійсні типи): float, double, decimal.
  • Символьний тип: char.
  • Логічний тип: bool.
  • Рядковий тип: string.


2. Які особливості використання цілочисельних типів даних?

У C# є такі основні цілочисельні типи даних:

sbyte, byte, short, ushort, int, uint, long, ulong.

Дані таких типів представляють собою значення з множини цілих чисел. Наприклад: -200, 8938, 1134448348.

Символи u перед назвами деяких типів є скороченням від слова unsigned. Це означає, що значення змінних цих типів є без знаку, тобто зберігати від’ємні числа у змінних цих типів неможна.

Змінні типів sbyte та byte займають 1 байт в пам’яті комп’ютера. Змінні типу short та ushort2 байти. Змінні типу int та uint4 байти. Змінні типу long та ulong – 8 байт.


3. Як у програмі описати змінну з іменем d цілого типу int?

Відповідь:

int d;

Після такого опису під змінну з іменем d буде виділено 4 байти пам’яті комп’ютера.


4. Як у змінну d цілого типу ulong занести число 398?

Для присвоєння змінній деякого значення використовується оператор присвоєння, який позначається оператором ‘=‘.

Відповідь 1. Присвоєння значення змінній після її опису.

ulong d;
d = 398;

Відповідь 2. Присвоєння значення змінній під час її опису.

ulong d = 398;


5. Як програмно визначити розмір змінної заданого типу?

Щоб визначити розмір змінної використовується операція sizeof():

int d;
d = sizeof(sbyte); // d = 1
d = sizeof(short); // d = 2
d = sizeof(int);   // d = 4
d = sizeof(long);  // d = 8

Таким способом можна обчислити розмір в байтах змінної будь-якого базового типу.


6. Які особливості типів даних з плаваючою комою (дійсні типи)?

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

  • float – реалізує числа одинарної точності. Цей тип є псевдонімом класу System.Single;
  • double – реалізує числа подвійної точності. Цей тип відповідає класу System.Double;
  • decimal – призначений для виконання обчислень, що потребують особливої точності у представленні дробової частини числа, а також мінімізації помилок округлення. Тип даних decimal доцільно застосовувати для фінансових обчислень, де питання точності є особливо важливим.

Ці типи дозволяють зберігати числа з плаваючою комою, наприклад:

2.85
-1000.399
20390239.939

У порівнянні з типом double, тип decimal не вирішує помилок округлення але мінімізує їх. Помилки округлення виникають у випадку, коли відбувається операція ділення чисел, результат якої дає дробову частину в періоді

1.0/3.0 = 0.33333(3) - число 3 в періоді

При множенні цього числа 0.33333(3) на 3 вже не буде отримане початкове число 1.0. Таким чином відбувається втрата точності. Тип decimal призначений для зменшення цих втрат точності за рахунок збільшення кількості розрядів у дробовій частині числа.


7. Як описати змінну дійсного типу (з плаваючою комою)?

Приклад опису змінних типу float, double, decimal:

float x;
double y;
decimal z;

Тут описується три змінні з іменами x, y, z. Під змінну x виділяється 4 байти пам’яті, під змінну y виділяється 8 байт, під змінну z виділяється 16 байт.


8. Як програмно занести значення у змінну дійсного типу?

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

float f = (float)9030.939; // початкова ініціалізація
double d;
decimal z;
d = -392093828.3993;
z = (decimal)390209.3099029;

У даному коді, при внесенні даних у змінну f, відбувається переведення числового значення 9030.939 у тип float. Так само відбувається переведення числа для змінної z у тип decimal. Таке перетворення є необхідним для дійсних типів, тому що усі числові значення є типу double.


9. Як визначити скільки байт пам’яті займає одна змінна типу float, double чи decimal?

Щоб визначити це, потрібно написати такий програмний код:

int d;
d = sizeof(float);   // d = 4
d = sizeof(double);  // d = 8
d = sizeof(decimal); // d = 16


10. Як перевести змінну типу float в тип int?

Для цього використовується операція приведення типів. У дужках потрібно вказати назву типу до якого відбувається приведення.

Приклад:

float a;
int b;
a = (float)23.789;
b = (int)a; // b = 23

При використанні операцій приведення типів, потрібно враховувати обмеження, що накладаються на типи, які займають менше місця в пам’яті комп’ютера.

Наприклад, змінна типу short може представляти менший діапазон чисел, ніж змінні типу float, double. У наступному лістингу відбувається переповнення значення у змінній типу short:

short i;
float f;
f = (float)35748473.8;
i = (short)f; // i = 31352 - переповнення


11. Як перевести змінну з типу int у тип double?

Приклад приведення з int в double:

int i;
double d;
i = 3998;
d = (double)i;


12. Які є базові символьні типи даних в мові C#?

Відповідь: char, string

Тип string представляє послідовність символів.

Змінні типу char можуть отримувати значення одного символу. Значення змінної типу char взяте в одинарні лапки, наприклад:

'A'
'4'
';'

Змінна типу char представляє собою одиночний символ Unicode. Така змінна займає в пам’яті комп’ютера 2 байти.

Змінні типу string це рядки символів, які взяті в подвійні лапки, наприклад:

"This is a string"

Змінна типу string в C# може мати будь-яку довжину (кількість символів).


13. Які особливості використання даних типу char у програмі?

Дані типу char представляють символьне значення коду, введеного з клавіатури. Код символу представляє собою ціле число.

Наприклад, код символу ‘f‘ рівний значенню 102.

Фрагмент коду, в якому обчислюється код символу:

int code;
char symbol;
symbol = 's';
code = (int)symbol; // code = 115

Тобто, дані типу char є тими самими цілими числами. Дані типу char займають в пам’яті комп’ютера 1 байт.

Співвідношення “символ-код” розміщується у таблиці символів Windows. Символи з кодами від 0 до 127 – це зарезервовані символи BIOS. Вони включають найбільш вживані символи, символи цифр, символи латинської абетки. Ці символи змінити неможна.

Символи з кодами від 128 до 255 – це регіональні символи, що прив’язані до конкретної абетки того комп’ютера на якому встановлена операційна система Windows.


14. Як у програмі за кодом символу отримати його символьне представлення?

Фрагмент програмного коду, який переводить код (ціле число) в символ (тип char):

int code;
char symbol;
code = 115;
symbol = (char)code; // symbol = 's'


15. Які особливості використання змінних типу string?

Змінні типу string представляють собою рядки. Максимальна довжина рядка не обмежена.

Приклад опису змінної типу string з іменем s1.

string s1;

Приклад внесення рядка у змінні типу string:

string s1 = "Text-1";
string s2;
s2 = "Text-2";
char c;
c = s2[0]; // Символ з індексом 0. c = 'T'

Зі змінними типу string можна виконувати різноманітні операції. Детальний опис поширених операцій зі змінною типу string описано тут.


16. Які особливості використання змінної логічного типу bool?

Змінна логічного типу bool визначає лише два стани: “істина” та “не істина”. Змінна типу bool може приймати лише два значення: true, false.

Приклад використання змінної типу bool:

bool b1, b2 = true;
b1 = (6 <= 5); // b1 = false


17. Яким чином здійснюється початкова ініціалізація змінних різних типів?
int d = 231;
float z = (float)-23.15;
char c = 'k';
string s = "Hello!";
double r = -32.593;
bool b = true;


18. Яким чином визначити максимально допустиме (мінімально допустиме) значення змінної певного типу?

Щоб визначити максимально допустиме чи мінімально допустиме значення змінної деякого типу в бібліотеці .NET Framework використовуються властивості MaxValue та MinValue.

Приклади визначення граничних значень змінних різних типів.

Для змінних типу int:

// тип int
int i;
int MaxI;
int MinI;
MaxI = int.MaxValue; // MaxI = 2147483647
MinI = int.MinValue; // MinI = -2147483648

Для змінних типу ulong:

// тип ulong
ulong i;
ulong MaxUL;
ulong MinUL;
MaxUL = ulong.MaxValue; // MaxUL = 18446744073709551615
MinUL = ulong.MinValue; // MinUL = 0

Для змінних типу float:

float f;
float MaxF;
float MinF;
MaxF = float.MaxValue; // MaxF = 3.402823E+38
MinF = float.MinValue; // MinF = -3.402823E+38


19. Приклад, що демонструє відмінність між типами double та decimal

У нижченаведеному прикладі демонструється відмінність в округленні між типами double та decimal.

При діленні числа 1.0 на число 3.0 для обох типів відбувається втрата точності, що є природно. При множенні отриманого результату на 3.0 відбувається наступне:

  • для типу double результат стає рівний 1.0. Це означає, що відбулось округлення числа 0.3(3) компілятором. Таке округлення у деяких випадках (наприклад, фінансових розрахунках) є небажаним;
  • для типу decimal результат стає рівний 0.9(9). Це означає, що зворотна операція множення для типу decimal виконується без округлення. Отже, тип decimal зменшує помилки втрати точності для дійсних чисел порівняно з типом double.

Текст демонстраційної програми типу Console Application наступний:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication8
{

  class Program
  {

    static void Main(string[] args)
    {
      // Відмінність між типами double та decimal, демонстрація

      // 1. Оголошення змінних типів double та decimal
      double dbl; 
      decimal dcm;

      // 2. Ділення 1.0/3.0 - відбувається втрата точності для обох типів
      dbl = 1.0 / 3.0; // dbl = 0,333333333333333
      dcm = Decimal.One / (decimal)3.0; // dcm = 0,3333333333333333333333333333

      // 3. Виведення на екран результату ділення
      Console.WriteLine("dbl = {0}", dbl);
      Console.WriteLine("dcm = {0}", dcm);

      // 4. Множення на 3.0
      // тип double робить округлення, 
      // тобто відбувається втрата точності в цьому напрямку (при множенні)
      dbl = dbl * 3.0; // dbl = 1.0

      // тип decimal округлення не робить, 
      // округлення немає, а, отже немає і втрати точності
      dcm = dcm * (decimal)3.0; // dcm = 0,9999999999999999999999999999

      // 5. Виведення результату для перевірки
      Console.WriteLine("dbl = {0}", dbl);
      Console.WriteLine("dcm = {0}", dcm);

      Console.ReadKey();
    }
  }
}

Результат виконання програми

dbl = 0,333333333333333
dcm = 0,3333333333333333333333333333
dbl = 1
dcm = 0,9999999999999999999999999999