- •Лекция 2. Типы данных с#. Переменные, операции, выражения
- •Встроенные типы
- •Типы-значения и ссылочные типы
- •Упаковка и распаковка
- •Переменные
- •Пример описания локальных переменных
- •Именованные константы
- •Операции и выражения
- •Преобразования встроенных арифметических типов-значений
- •Явное преобразование типа
- •Основные операции с#
Лекция 2. Типы данных с#. Переменные, операции, выражения
Тип данных однозначно определяет:
-
Внутреннее представление данных – множество их значений
-
Допустимые действия над данными (операции и функции)
Каждое выражение в программе имеет определенный тип. Память, в которой хранятся данные во время выполнения программы, делятся на две области – стек и динамическая память. Стек используется для хранения величин, память под которые выделяет компилятор. В динамической области памяти (heap- куча) память резервируется и освобождается во время выполнения программы с помощью специальных команд самим программистом.
Классификация типов данных в С# представлена на рисунке 3.1
Рисунок 3.1 – Классификация типов данных в С# по различным признакам
Встроенные типы
Встроенные типы приведены в таблице 3.1. Они однозначно соответствуют стандартным классам библиотеки .NET определенным в пространстве имен System.
Как видно из таблицы, существует несколько вариантов представления целых и вещественных величин.
Внутреннее представление величины целого типа – целое число в двоичном коде. В знаковых типах старший бит числа интерпретируется как знаковый (0-положительное число, 1-отрицательное). Отрицательные числа чаще всего представляются в дополнительном коде – все разряды числа, кроме знакового разряда, инвертируются, затем к числу прибавляется единица, и знаковому биту присваивается единица. Беззнаковые типы позволяют представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа.
Вещественные типы хранятся в памяти иначе, чем целочисленные. Внутреннее представление величины вещественного типа состоит из двух частей – мантиссы и порядка, каждая часть имеет знак. Длина мантиссы определяет точность числа, а длина порядка – его диапазон. Например, число 0,381*10^4 хранятся цифры мантиссы 381 и порядок 4, для числа 560,3*10^2 – мантисса 5603 и порядок 5.
Тип decimal предназначен для денежных вычислений, в которых критичны ошибки округления. Данные тип не относится к вещественным типам, у них разное внутреннее представление. Величины денежного типа нельзя использовать в одном выражении с вещественными буз явного преобразования типа.
Любой встроенный тип языка С# соответствует стандартному классу библиотеки .NET. Везде, где используется имя встроенного типа его можно заменить именем класса библиотеки System. Это значит, что у встроенных типов есть методы и поля. Например:
double.MaxValue (System.Double.MaxValue) – максимальное значение числа типа double.
uint.MinValue (System.UInt32.MinValue) – минимальное значение числа типа uint.
Таблица 3.1 – Встроенные типы языка С#
Название |
Ключевое слово |
Тип .NET |
Диапазон |
Описание |
Размер, битов |
Логический тип |
bool |
Boolean |
true, false |
|
|
Целые типы |
sbyte |
SByte |
-128..127 |
Со знаком |
8 |
byte |
Byte |
0..255 |
Без знака |
8 |
|
short |
Int16 |
-32768..32767 |
Со знаком |
16 |
|
ushort |
UInt16 |
0..65535 |
Без знака |
16 |
|
int |
Int32 |
-2*10^9..2*10^9 |
Со знаком |
32 |
|
uint |
UInt32 |
0..4*10^9 |
Без знака |
32 |
|
long |
Int64 |
-9*10^18..9*10^18 |
Со знаком |
64 |
|
ulong |
UInt64 |
0..18*10^18 |
Без знака |
64 |
|
Символьный тип |
char |
Char |
U+0000..U+ffff |
Unicode-символ |
16 |
Вещественные типы |
float |
Single |
1.5*10^-45..3.4*10^38 |
7 цифр |
32 |
double |
Double |
5.0*10^-324..1.7*10^308 |
15-16 цифр |
64 |
|
Финансовый тип |
decimal |
Decimal |
1.0*10^-28..7.9*10^28 |
28-29 цифр |
128 |
Строковый тип |
string |
String |
Длина ограничена объемом доступной памяти |
Строка из Unicode-символов |
|
Тип object |
object |
Object |
Можно хранить все что угодно |
Всеобщий порядок |
|