Тема 6. Переменные

Расположение информации в памяти

Память можно предмтавить как последовательность пронумерованных ячеек, размером в 1 байт. При этом номер ячейки соответствует адресу этой ячейки в памяти. При работе программа запрашивает ОС о выделении ей памяти нужного размера. ОС выделяет этой программе память и передаёт ей адрес первого байта. Программа может использовать выделенный участок памяти, но в конце, когда он программе не нужен, она должна вернуть этот участок обратно ОС (если память не возвращать, у ОС закончится свободная память и она не сможет далее нормально работать. В CL и C# сборщик мусора сам находит "выброшенные" участки памяти и возвращает их ОС).

Минимальный объем физической памяти, которую можно адресовать - 1 байт. Это соответствует 256 комбинациям. Или другими словами в 1 байте памяти можно хранить целое число от 0 до 255 (или от -128 до 127 если число со знаком).

Как хранить в памяти более крупные числа ? Использовать больше ячеек памяти.

2 байтовые ячейки - числа от 0 до 65,535 или от -32768 до 32767;

4 байтовые ячейки - числа от 0 до 4,294,967,295 или от -2,147,483,648 до 2,147,483,647;

8 байтовые ячейки - числа от 0 до 18,446,744,073,709,551,615 или от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.

3, 5, 6, 7, 9 или более байтовые ячейки - аппаратура не предназначена для обработки таких чисел, поэтому в языках программирования они не используются. Можно реализовать симуляцию таких чисел, но это для обычных задач не практично.

В память может быть закодирована любая информация. Так к примеру: Дробные числа - кодируются в последовательности битов и хранятся в соседних ячейках памяти. Текст - каждая буква представляется 1 байтом (или 2, 4 соседними байтами). В конце строки записывается код 0.; Логические значения - Минимальный объем хранимой информации - 1 бит, логически соответствует типу bool (да/нет, истина/ложь, true/false). Однако в памяти занимает 1 байт.;

Дробные числа

float 4 От ±1,5e−45 до ±3,4e38 7 значащих цифр double 8 От ±5,0e−324 до ±1,7e308 15-16 значащих цифр decimal 16 (От -7,9 x 1028 до 7,9 x 1028) / (100–28) 28–29 значащих цифр

Основные типы переменных

int - целые числа. Служат для счета, перебора, идентификации объектов. Соответствует CL типу System.Int32; float – дробные числа одинарной точности. Служат для измерения величин ( длина, вес, ... ), математических вычислений. Соответствует CL типу System.Single; double – дробные числа двойной точности. Служат для более точных математических вычислений. Соответствует CL типу System.Double; decimal - дробные числа повышенной точности. Соответствует CL типу System.Decimal; string – текстовые данные. Соответствует CL типу System.String; char – текстовый тип, содержащий текстовый символ. Соответствует CL типу System.Char; bool – логический тип, содержащий значения true/false. Соответствует CL типу System.Boolean; byte – тип, представляющий один байт информвации. Соответствует CL типу System.Byte.

Типы "По-Значению" и "По-Ссылке"

Тип По-Значению ( анг. Value Type )

Переменные типа "По-Значению" хранят свои данные в прямо ячейках памяти, которым соответствует наименование переменной.

Тип По-Ссылке ( анг. Reference Type )

Переменные типа "По-Ссылке" хранят свои данные в отдельном блоке памяти. В ячейках памяти, которым соответствует наименование переменной хранится адрес этого блока прямо.

Ключевое слово sizeof

Ключевое слово sizeof выдает размер, занимаемый переменной в памяти.

Примеры контроля типов

Неинициированная переменная

int a;

if ( a < 100 )
    System.Console.WriteLine("small");
else
    System.Console.WriteLine("big");

Результат: Ошибка при компиляции. Компилятор понимает что в переменной a значение случайно, это ведет к ошибкам ( багам ) и предотвращает дальнейшую компиляцию. Инициированная переменная

int a = 83;

if ( a < 100 )
    System.Console.WriteLine("small");
else
    System.Console.WriteLine("big");

Результат: small ( Без ошибок ). Деление на 0 для целых чисел

int a = 12;
int b = 0;
System.Console.WriteLine( a / b );

Результат: Исключительная ситуация System.DivideByZeroException Деление на 0 для дробных чисел

double a = 12;
double b = 0;
System.Console.WriteLine( a / b );

Результат: Infinity ( Без исключительной ситуации ) Присвоение дробному числу целого

int a = 27;
double b = a;
System.Console.WriteLine( b );

Результат: 27 ( Без исключительной ситуации )

Присвоение целому числу дробного

double a = 27;
int b = a;
System.Console.WriteLine( b );

Результат: Ошибка при компиляции

Дополнительная литература

https://msdn.microsoft.com/ru-ru/library/6c70zway%28v=vs.90%29.aspx http://mycsharp.ru/post/6/2013_04_15_pishem_pervuyu_programmu_na_si-sharp.html http://4fps.ru/programming/c-sharp-tutorials/class-structure-of-code/

results matching ""

    No results matching ""