000103. Типы данных в C#. Базовые операции над ними.

Типы данных в C#. Базовые операции над ними.|В этом уроке Вы узнаете о базовых типах данных в C#, которые справедливы и для скриптинга GTA IV.|wmysterio|wmysterio||||Как вчера помню, как писал урок о типах данных в SannyBuilder и вот уже добрался и к GTA 4 :) Если в саннике типов данных было так мало, что на пальцах посчитать можно, то в C# их просто огромное количество! Большинство из них я сам не знаю, поэтому рассмотрим то, что чаще встречаются.

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

ТипСинонимРазмер ( в байтах )Диапазон значений

System.Byte

byte

1

[0;255]

System.SByte

sbyte

1

[-128;127]

System.Int16

short

2

[-32768;32767]

System.UInt16

ushort

2

[0;65535]

System.Int32

int

4

[-2147483648;2147483647]

System.UInt32

uint

4

[0;4294967295]

System.Int64

long

8

[-9223372036854775808;9223372036854775807]

System.UInt64

ulong

8

[0;18446744073709551615]

Дальше пойдут дробные числа. Есть, как минимум три, часто использующихся типа:

ТипСинонимРазмер ( в байтах )Диапазон значений

System.Single

float

4

[5E-45;3.4E+38]

System.Double

double

8

[5E-324;1.7Е+308]

System.Decimal

decimal

16

[1Е-28;7.9Е+28]

Также в C# мы можем хранить как отдельный символ в переменной, так и целую строку. Для этого существуют следующие типы:

ТипСинонимРазмер ( в байтах )Диапазон значенийФорма записи

System.Char

char

2

[0;65535]

'D'

System.String

string

4-8 в зависимости от разрядности ОС

-

"my string"

Размер символов, как и диапазон, может варьироваться, в зависимости от выбранной кодировки, но, как правило, этого хватает для большинства языков. В кавычках мы можем указать только 1 символ!

Что касается строк, то они являются ссылочными типами данных, но реализованы как остальные простые типы. Строка являет собой фиксированный набор символов, который собирается из всех символов, помещённых в двойные кавычки. Ограничения на длину строки, как таковую, нет и зависит она по большей мере от достуной оперативной памяти.

Есть ещё очень важный простый логический тип, который чаще всего используется для хранение состояний ( истина / ложь ), а также как выражение для проверки условий:

ТипСинонимРазмер ( в байтах )Форма записи

System.Boolean

bool

1

true или false

Здесь важно отметить, что в C# не определено взаимное преобразование логических и целых значений. Например, 1 не преобразуется в значение true, а 0 - в значение false. И на оборот. На этот крючок часто попадаются люди, которые переходят с C/C++, где такое преобразование допускалось, и из за этого возникают некоторые проблемы.

Давайте узнаем как объявлять переменные! Есть много способов. Вот таблица этих вариантов:

Объявление в столбикОбъявление в одну строкуОбъявление и присвоение значения переменным

```

cs int a; int b; int c;

</td><td>

cs int a, b, c;

</td><td>

cs int a = 0; int b, c = 36; int d = -5, c = 20;

</td></tr>
</tbody></table>

<div class="alert alert-warning alert-dismissible" role="alert">
 <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
**Примечание:** Если переменные объявлены таким видом: <u>int b, c = 36</u>, то значение <u>36</u> будет присвоено только переменной <u>c</u>, а не всем переменным. Помните об этом!
</div>

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

cs float x = 20.0; // ошибка float y = 4; // всё ок



Во втором случае мы указали число вовсе без плавающей точки и при этом отработало всё на ура. А вот первый вариант никак не поймёт что мы написали. Суть ошибки в том, что по-умолчанию выражение <u>20.0</u> относится к типу **double**, у которого нет явного преобразования в тип <u>float</u>. Чтобы указать компилятору, что мы хотим использовать именно <u>float</u>, нужно дописать суффикс **F** ( регистр может быть любым ):

cs float x = 20.0F; // всё ок float y = 4F; // тоже работает



На самом деле таких суффиксов достаточно много, но рассматривать их здесь я не буду. Вы уже можете найти их самостоятельно. Ещё одна особенность литералов в способе написания дробных чисел, например: <u>0.0001F</u>. C# позволяет нам пропускать первое число до точки, в результате мы можем увидеть и такую запись:

cs float x = .0001F;



Далее рассмотрим операции над типами, которые существуют в C#. Если в SannyBuilder все операции нумеровались ( опкоды ) и сам скриптовый язык был низкоуровневым, то C# позволяет делать огромное количество операций, комбинируя их.

Все операции можно разделить на несколько типов. Обычно за операции отвечают так называемые операторы. Они применяются не только для базовых типов и могут нести дополнительную логику при использовании оператора ( не обязательно выполняя ту операцию, символ которого используется ):


- Арифметические операторы:
<table class="table table-bordered"><tbody>
<tr><th>Оператор</th><th>Действие</th></tr>
<tr><td>+</td><td>Сложение</td></tr>
<tr><td>-</td><td>Вычитание, унарный минус</td></tr>
<tr><td>*</td><td>Умножение</td></tr>
<tr><td>/</td><td>Деление</td></tr>
<tr><td>%</td><td>Деление по модулю</td></tr>
<tr><td>--</td><td>Декремент</td></tr>
<tr><td>++</td><td>Инкремент</td></tr>
</tbody></table>

- Операторы отношения, ( означает взаимосвязь, которая может существовать между двумя значениями ):
<table class="table table-bordered"><tbody>
<tr><th>Оператор</th><th>Действие</th></tr>
<tr><td>==</td><td>Равно</td></tr>
<tr><td>!=</td><td>Не равно</td></tr>
<tr><td>></td><td>Больше</td></tr>
<tr><td><</td><td>Меньше</td></tr>
<tr><td>>=</td><td>Больше или равно</td></tr>
<tr><td><=</td><td>Меньше или равно</td></tr>
</tbody></table>

- Логические операторы ( взаимосвязь между логическими значениями "истина" и "ложь" ):

<table class="table table-bordered"><tbody>
<tr><th>Оператор</th><th>Действие</th></tr>
<tr><td>&</td><td>И</td></tr>
<tr><td>\|</td><td>ИЛИ</td></tr>
<tr><td>^</td><td>Исключающее ИЛИ</td></tr>
<tr><td>&&</td><td>Укороченное И</td></tr>
<tr><td>\|\|</td><td>Укороченное ИЛИ</td></tr>
<tr><td>!</td><td>НЕ</td></tr>
</tbody></table>

- Операторы присваивания:
<table class="table table-bordered"><tbody>
<tr><th>Оператор</th><th>Аналог</th></tr>
<tr><td>+= </td><td>x = x + 1;</td></tr>
<tr><td>-= </td><td>x = x - 1;</td></tr>
<tr><td>*=</td><td>x = x * 1;</td></tr>
<tr><td>/=</td><td>x = x / 1;</td></tr>
<tr><td>%=</td><td>x = x % 1;</td></tr>
<tr><td>\|=</td><td>x = x \| 1;</td></tr>
<tr><td>^=</td><td>x = x ^ 1;</td></tr>
</tbody></table>

- Поразрядные операторы:

<table class="table table-bordered"><tbody>
<tr><th>Оператор</th><th>Действие</th></tr>
<tr><td>&</td><td>Поразрядное И</td></tr>
<tr><td>\|</td><td>Поразрядное ИЛИ</td></tr>
<tr><td>^</td><td>Порязрядное исключающее ИЛИ</td></tr>
<tr><td><<</td><td>Сдвиг влево</td></tr>
<tr><td>>></td><td>Сдвиг вправо</td></tr>
<tr><td>~</td><td>Дополнение до 1 ( унарный оператор НЕ )</td></tr>
</tbody></table>



Как мы видим, некоторые операторы могут использоваться в разных целях, в зависимости где их применяют. В одном случае он может быть логическим - в другом: поразрядным. В любом случае, для написания скриптов для GTA IV большинство операторов будет не нужно.

Примеров может быть уйма, я написал самый простой:

cs int a; a = (25 + 65)*2; a /= 5;



Объявляем переменную типа int. Дальше идут операции над ней. Проблемы, думаю, могут возникнут у того, кто не дружил с математикой в детстве(или сейчас).

Язык C# действует по тому же принципу, что и математика. Сначала выбирается приоритет выполнения операций. В нашем случаи сначала будут выполнятся операции в скобках: 25+65=90. Дальше идёт умножение: 90*2=180. Этот результат записывается в переменную <u>a</u>. Следующая операция: идёт деление на 5. Принцип тот же, что и у SannyBuilder. Переменная делит своё значение на выражение и записывает результат в себя. Следовательно, 180/5=36.

Другие операции будем рассматривать по-необходимости. Сейчас нет смысла нагружать вас этим :)|866|1|0||tipy_dannykh_v_csharpe_operacii_nad_nimi|1511732572

Last updated