Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ShPOR.docx
Скачиваний:
38
Добавлен:
23.04.2019
Размер:
93.52 Кб
Скачать
  1. Концепция типа данных. Встроенные типы данных и их реализация в языке с#

Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается: множеством допустимых значений типа, набором операций для этого типа, диапазоном допустимых значений, количеством памяти, необходимой для хранения данного типа. Тип данных определяет допустимые действия над данными.

Все встроенные типы C# однозначно отображаются, а фактически совпадают с системными типами каркаса Net Framework, размещенными в пространстве имен System. Поэтому всюду, где можно использовать имя типа, например, — int, с тем же успехом можно использовать и имя System.Int32.

Таблица, содержащая описание всех встроенных типов языка C# и их осн. характеристики

Логический тип Имя типа Системный тип Значения Размер Bool System.Boolean true, false 8 бит Арифметические целочисленные типы Имя типа Системный тип Диапазон Размер Sbyte System.SByte -128 — 127 Знаковое, 8 Бит Byte System.Byte 0 — 255 Беззнаковое, 8 Бит Short System.Short -32768 —32767 Знаковое, 16 Бит Ushort System.UShort 0 — 65535 Беззнаковое, 16 Бит Int System.Int32 ≈(-2*10^9 — 2*10^9) Знаковое, 32 Бит Uint System.UInt32 ≈(0 — 4*10^9) Беззнаковое, 32 Бит Long System.Int64 ≈(-9*10^18 — 9*10^18) Знаковое, 64 Бит Ulong System.UInt64 ≈(0— 18*10^18) Беззнаковое, 64 Бит Арифметический тип с плавающей точкой Имя типа Системный тип Диапазон Точность Float System.Single +1.5*10^-45 - +3.4*10^38 7 цифр Double System.Double +5.0*10^-324 - +1.7*10^308 15-16 цифр Арифметический тип с фиксированной точкой Имя типа Системный тип Диапазон Точность Decimal System.Decimal +1.0*10^-28 - +7.9*10^28 28-29 значащих цифр Символьные типы Имя типа Системный тип Диапазон Точность Char System.Char U+0000 - U+ffff 16 бит Unicode символ String System.String Строка из символов Unicode Объектный тип Имя типа Системный тип Примечание Object System.Object Прародитель всех встроенных и пользовательских типов

2. Концепция типа данных. Соглашения о совместимости и приведение типов

В программировании переменной одного типа часто присваивается значение переменной другого типа. Например, как показано в следующем фрагменте программы, мы могли бы присвоить переменной типа float значение типа int .

int i; float f;

i = 10; f = i; // float-переменной присваивается int-значение.

Если в инструкции присваивания смешиваются совместимые типы, значение с правой стороны (от оператора присваивания) автоматически преобразуется в значение "левостороннего" типа. Таким образом, в предыдущем фрагменте программы значение, хранимое в int-переменной i, преобразуется в значение типа float, а затем присваивается переменной f. Но, поскольку в С# не все типы совместимы и действует строгий контроль типов, не все преобразования типов разрешены в неявном виде. Например, типы bool и int несовместимы. Тем не менее с помощью операции приведения типов все-таки возможно выполнить преобразование между несовместимыми типами. Приведение типов — это выполнение преобразования типов в явном виде.

При присвоении значения одного типа данных переменной другого типа будет выполнено автоматическое преобразование типов, если: эти два типа совместимы; тип приемника больше (т.е. имеет больший диапазон представления чисел), чем тип источника.

При соблюдении этих двух условий выполняется преобразование с расширением, или расширяющее преобразование. Например, тип int — достаточно "большой" тип, чтобы сохранить любое допустимое значение типа byte, а поскольку как int , так и byte — целочисленные типы, здесь может быть применено автоматические преобразование. Для расширяющих преобразований числовые типы, включая целочисленные и с плавающей точкой, совместимы один с другим. Например, преобразование типов из long в double является расширяющим, которое выполняется автоматически.

double D; long L;

L = 100123285L; D = L;

Несмотря на возможность автоматического преобразования типов из long в double, обратное преобразование типов (из double в long) автоматически не выполняется, поскольку это преобразование не является расширяющим.

Несмотря на большую пользу автоматического преобразования типов оно не в состоянии удовлетворить все нужды программирования, поскольку реализуется только при расширяющем преобразовании между совместимыми типами. Во всех остальных случаях приходится применять приведение к типу. Приведение к типу — это явно заданная инструкция компилятору преобразовать один тип в другой. Инструкция приведения записывается в следующей общей форме:

(тип_приемника) выражение

Здесь элемент тип_приемника определяет тип для преобразования заданного выражения. Например, если вам нужно, чтобы выражение х/у имело тип int , напишите следующие программные инструкции:

double х, у; (int) (х / у) ;

В этом фрагменте кода, несмотря на то, что переменные х и у имеют тип double, результат вычисления заданного выражения приводится к типу int. Круглые скобки, в которые заключено выражение х / у , обязательны. В противном случае (без круглых скобок) операция приведения к типу int была бы применена только к значению переменной х, а не к результату деления. Для получения результата желаемого типа здесь не обойтись без операции приведения, поскольку автоматического преобразования из типа double в int не существует.

Если приведение приводит к сужающему преобразованию, возможна потеря информации. Например, в случае приведения типа long к типу int информация будет утеряна, если значение типа long больше максимально возможного числа, которое способен представить тип int , поскольку будут "усечены" старшие разряды long-значения. При выполнении операции приведения типа с плавающей точкой к целочисленному будет утеряна дробная часть простым ее отбрасыванием. Например, при присвоении переменной целочисленного типа числа 1,23 в действительности будет присвоено число 1. Дробная часть (0,23) будет утеряна.

// Приведение типа byte к типу char.

b = 88; // ASCII-код для буквы X.

ch = (char) b;

3. Концепция типа данных. Числовые типы данных.

Арифметические целочисленные типы Имя типа Системный тип Диапазон Размер Sbyte System.SByte -128 — 127 Знаковое, 8 Бит Byte System.Byte 0 — 255 Беззнаковое, 8 Бит Short System.Short -32768 —32767 Знаковое, 16 Бит Ushort System.UShort 0 — 65535 Беззнаковое, 16 Бит Int System.Int32 ≈(-2*10^9 — 2*10^9) Знаковое, 32 Бит Uint System.UInt32 ≈(0 — 4*10^9) Беззнаковое, 32 Бит Long System.Int64 ≈(-9*10^18 — 9*10^18) Знаковое, 64 Бит Ulong System.UInt64 ≈(0— 18*10^18) Беззнаковое, 64 Бит Арифметический тип с плавающей точкой Имя типа Системный тип Диапазон Точность Float System.Single +1.5*10^-45 - +3.4*10^38 7 цифр Double System.Double +5.0*10^-324 - +1.7*10^308 15-16 цифр Арифметический тип с фиксированной точкой Имя типа Системный тип Диапазон Точность Decimal System.Decimal +1.0*10^-28 - +7.9*10^28 28-29 значащих цифр

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]