0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Система типов - это…</a></li>
1
<ul><li><a>Система типов - это…</a></li>
2
<li><a>Базовые типы в C</a><ul><li><a>Логический тип</a></li>
2
<li><a>Базовые типы в C</a><ul><li><a>Логический тип</a></li>
3
</ul></li>
3
</ul></li>
4
<li><a>Типы значений в C#</a><ul><li><a>Целочисленные</a></li>
4
<li><a>Типы значений в C#</a><ul><li><a>Целочисленные</a></li>
5
<li><a>С плавающей точкой</a></li>
5
<li><a>С плавающей точкой</a></li>
6
<li><a>Десятичные</a></li>
6
<li><a>Десятичные</a></li>
7
<li><a>Символы</a></li>
7
<li><a>Символы</a></li>
8
<li><a>Логические данные</a></li>
8
<li><a>Логические данные</a></li>
9
<li><a>Литералы</a></li>
9
<li><a>Литералы</a></li>
10
</ul></li>
10
</ul></li>
11
</ul><p>В C и C#, как и в ряде других языков программирования, типы данных имеют особое значение. Не во всех ЯП типизация одинаково важна - существуют языки, в которых она может не указываться. В таких случаях система все определит самостоятельно. C и C# относятся к языкам со строгой типизацией, поэтому здесь придется указывать, с какой именно переменной предстоит иметь дело.</p>
11
</ul><p>В C и C#, как и в ряде других языков программирования, типы данных имеют особое значение. Не во всех ЯП типизация одинаково важна - существуют языки, в которых она может не указываться. В таких случаях система все определит самостоятельно. C и C# относятся к языкам со строгой типизацией, поэтому здесь придется указывать, с какой именно переменной предстоит иметь дело.</p>
12
<p>Строгая типизация указывает на то, что все операции будут подвергаться строгому контролю со стороны компилятора на соответствие типов. Недопустимые команды и манипуляции в процессе запуска созданного программного обеспечения компилироваться не будут.</p>
12
<p>Строгая типизация указывает на то, что все операции будут подвергаться строгому контролю со стороны компилятора на соответствие типов. Недопустимые команды и манипуляции в процессе запуска созданного программного обеспечения компилироваться не будут.</p>
13
<p>Такой контроль дает возможность исключить ошибки в работе исходного приложения, а также повысить надежность программ. Для того, чтобы контролировать типы всех переменных, значения и выражения должны принадлежать к определенному виду. Понятия переменного "бестипового" характера в этих языках нет.</p>
13
<p>Такой контроль дает возможность исключить ошибки в работе исходного приложения, а также повысить надежность программ. Для того, чтобы контролировать типы всех переменных, значения и выражения должны принадлежать к определенному виду. Понятия переменного "бестипового" характера в этих языках нет.</p>
14
<p>Далее предстоит изучить основные типы переменных в C и C#. Эта информация пригодится как новичкам, так и тем, кто уже немного разбирается в программировании. Она поможет понять, какие "виды" переменных можно использовать в упомянутых языках, а также какие особенности имеет каждый из них.</p>
14
<p>Далее предстоит изучить основные типы переменных в C и C#. Эта информация пригодится как новичкам, так и тем, кто уже немного разбирается в программировании. Она поможет понять, какие "виды" переменных можно использовать в упомянутых языках, а также какие особенности имеет каждый из них.</p>
15
<h2>Система типов - это…</h2>
15
<h2>Система типов - это…</h2>
16
<p>Система типов Си - это реализация понятия типа данных в языке Си. Этот язык предоставляет базовые арифметические "виды" и синтаксис для создания массивов и составных типов. Некоторые заголовочные файлы из стандартной библиотеки C предусматривают определения типов с дополнительными параметрами.</p>
16
<p>Система типов Си - это реализация понятия типа данных в языке Си. Этот язык предоставляет базовые арифметические "виды" и синтаксис для создания массивов и составных типов. Некоторые заголовочные файлы из стандартной библиотеки C предусматривают определения типов с дополнительными параметрами.</p>
17
<p>Тип значения определит те операции в C# и C, которые можно выполнять над ними, а также объяснит системе (компилятору), как обрабатывать те или иные переменные/значения. Операции, которые разрешены для одного типа данных, могут оказаться под запретом для других.</p>
17
<p>Тип значения определит те операции в C# и C, которые можно выполнять над ними, а также объяснит системе (компилятору), как обрабатывать те или иные переменные/значения. Операции, которые разрешены для одного типа данных, могут оказаться под запретом для других.</p>
18
<p>В C# поддерживаются две общие категории встроенных типов данных:</p>
18
<p>В C# поддерживаются две общие категории встроенных типов данных:</p>
19
<ul><li>типы значений;</li>
19
<ul><li>типы значений;</li>
20
<li>ссылочные типы.</li>
20
<li>ссылочные типы.</li>
21
</ul><p>Они будут отличаться по содержимому заданной переменной. Разница между ними заключается в том, что value type (тип значения) хранит данные непосредственно, а reference type (ссылочный тип) хранит ссылку на значение.</p>
21
</ul><p>Они будут отличаться по содержимому заданной переменной. Разница между ними заключается в том, что value type (тип значения) хранит данные непосредственно, а reference type (ссылочный тип) хранит ссылку на значение.</p>
22
<p>Соответствующие типы будут сохраняться в разных местах памяти: типы значений - в стеке, а ссылочные - в управляемой куче.</p>
22
<p>Соответствующие типы будут сохраняться в разных местах памяти: типы значений - в стеке, а ссылочные - в управляемой куче.</p>
23
<p>В C много базовых типов. Большинство из них состоит из одного-четырех спецификаторов типа (float, char, int, double) и опциональных спецификаторов (short, long, signed, unsigned). На подавляющем большинстве современных платформ 1 байт = 8 бит, но бывают исключительные ситуации, при которых 1 байт = 16 бит или другому числу. Обычно им выступает степень двойки.</p>
23
<p>В C много базовых типов. Большинство из них состоит из одного-четырех спецификаторов типа (float, char, int, double) и опциональных спецификаторов (short, long, signed, unsigned). На подавляющем большинстве современных платформ 1 байт = 8 бит, но бывают исключительные ситуации, при которых 1 байт = 16 бит или другому числу. Обычно им выступает степень двойки.</p>
24
ТипОписаниеСпецификаторCharЦелочисленный тип. Самый маленький из всех возможных. Может включать в себя базовый символьный набор. Бывает знаковым и беззнаковым - в зависимости от реализации.%cSigned charИмеет тот же размер, что и char, но гарантированно имеет знак. Способен принимать значения как минимум из диапазона [-127, +127]. Обычно встречается в реализациях [-128, +127]%c. Можно также воспользоваться записями: %d, %hhi, %hhx, %hho для вывода в числовом формате.Unsigned charТого же размера, что и char, но без знака. Диапазон значений - [0, 255)/%с (или %hhu для вывода в числовой форме).Short, short int, signed short, signed short short intТип короткого целочисленного значения со знаком. Может включать в себя числа [-32767, +32767].%hiUnsigned short и unsigned short intТо же самое, что и short, но без знака. Диапазон значений - [0, +65535]%huInt, signed, signed intКлючевой тип целого числа, имеющего знак. Может включать в себя числа диапазона [-32767, +32767]. Имеет размер минимум 2 байта (или 16 бит). В современных компиляторах для 32- и более разрядных платформ имеет размер 4 байта и диапазон [-2 147 483 648, +2 147 483 647]. На платформах 16 и 8 бит имеет размер 2 байта.%i или %dUnsigned, unsigned intТо же самое, что и int, но без знака. Диапазон - [0, +4 294 967 295).%uLong, long int, signed long, signed long intТип длинного целочисленного значения со знаком. Может включать в себя числа из диапазона [-2 147 483 647, +2 147 483 647]. "Весит" минимум 32 бита (или 4 байта).%liUnsigned long, unsigned long intТо же самое, что и long, но без знака. Диапазон - [0, +4 294 967 295].%luLong long, long long int, signed long long, signed long long intТип длинного целого числа со знаком. Может называться двойное длинное. Включает в себя числа из диапазона [-9 223 372 036 854 775 808, +9 223 372 036 854 775 807. Это - 64 бита.%lli, %lldUnsigned long long, unsigned long long intНапоминает long long, но беззнаковый. Диапазон значений - [0, 18 446 744 073 709 551 615].%lluFloatТип вещественного числа с плавающей запятой. Обычно называется типом числа одинарной точности с плавающей запятой.%f (автоматически происходит преобразование в double для printf.DoubleТип вещественного числа с плавающей запятой. Это тип числа двойной точности с плавающей запятой.%f, %lf, %g, %eLong doubleТип вещественного числа с плавающей запятой повышенной точности. Может выступать 80-битным форматом с плавающей запятой.%LF %LF, %LG %LG, %Le %LE<p>Теперь понятно, какие базовые типы встречаются в C у чисел. Есть еще один вариант, который очень важен для разработчиков и основной массы современных приложений.</p>
24
ТипОписаниеСпецификаторCharЦелочисленный тип. Самый маленький из всех возможных. Может включать в себя базовый символьный набор. Бывает знаковым и беззнаковым - в зависимости от реализации.%cSigned charИмеет тот же размер, что и char, но гарантированно имеет знак. Способен принимать значения как минимум из диапазона [-127, +127]. Обычно встречается в реализациях [-128, +127]%c. Можно также воспользоваться записями: %d, %hhi, %hhx, %hho для вывода в числовом формате.Unsigned charТого же размера, что и char, но без знака. Диапазон значений - [0, 255)/%с (или %hhu для вывода в числовой форме).Short, short int, signed short, signed short short intТип короткого целочисленного значения со знаком. Может включать в себя числа [-32767, +32767].%hiUnsigned short и unsigned short intТо же самое, что и short, но без знака. Диапазон значений - [0, +65535]%huInt, signed, signed intКлючевой тип целого числа, имеющего знак. Может включать в себя числа диапазона [-32767, +32767]. Имеет размер минимум 2 байта (или 16 бит). В современных компиляторах для 32- и более разрядных платформ имеет размер 4 байта и диапазон [-2 147 483 648, +2 147 483 647]. На платформах 16 и 8 бит имеет размер 2 байта.%i или %dUnsigned, unsigned intТо же самое, что и int, но без знака. Диапазон - [0, +4 294 967 295).%uLong, long int, signed long, signed long intТип длинного целочисленного значения со знаком. Может включать в себя числа из диапазона [-2 147 483 647, +2 147 483 647]. "Весит" минимум 32 бита (или 4 байта).%liUnsigned long, unsigned long intТо же самое, что и long, но без знака. Диапазон - [0, +4 294 967 295].%luLong long, long long int, signed long long, signed long long intТип длинного целого числа со знаком. Может называться двойное длинное. Включает в себя числа из диапазона [-9 223 372 036 854 775 808, +9 223 372 036 854 775 807. Это - 64 бита.%lli, %lldUnsigned long long, unsigned long long intНапоминает long long, но беззнаковый. Диапазон значений - [0, 18 446 744 073 709 551 615].%lluFloatТип вещественного числа с плавающей запятой. Обычно называется типом числа одинарной точности с плавающей запятой.%f (автоматически происходит преобразование в double для printf.DoubleТип вещественного числа с плавающей запятой. Это тип числа двойной точности с плавающей запятой.%f, %lf, %g, %eLong doubleТип вещественного числа с плавающей запятой повышенной точности. Может выступать 80-битным форматом с плавающей запятой.%LF %LF, %LG %LG, %Le %LE<p>Теперь понятно, какие базовые типы встречаются в C у чисел. Есть еще один вариант, который очень важен для разработчиков и основной массы современных приложений.</p>
25
<h3>Логический тип</h3>
25
<h3>Логический тип</h3>
26
<p>В C99 был добавлен еще один тип. Он называется логическим (_Bool). Дополнительный заголовочный файл <stdbool.h> определит для него псевдоним bool, а также макросы true (истина) и false (ложь).</p>
26
<p>В C99 был добавлен еще один тип. Он называется логическим (_Bool). Дополнительный заголовочный файл <stdbool.h> определит для него псевдоним bool, а также макросы true (истина) и false (ложь).</p>
27
<p>_Bool ведет себя точно также, как и обычный встроенный тип, но с одним исключением: любое ненулевое (не ложное) присваивание будет сохранено в качестве единицы. Это помогает избегать переполнения.</p>
27
<p>_Bool ведет себя точно также, как и обычный встроенный тип, но с одним исключением: любое ненулевое (не ложное) присваивание будет сохранено в качестве единицы. Это помогает избегать переполнения.</p>
28
<h2>Типы значений в C#</h2>
28
<h2>Типы значений в C#</h2>
29
<p>Основные "виды" переменных в C понятны. Теперь можно рассмотреть их на примере C#. Для этого языка предстоит разобрать типизацию более подробно.</p>
29
<p>Основные "виды" переменных в C понятны. Теперь можно рассмотреть их на примере C#. Для этого языка предстоит разобрать типизацию более подробно.</p>
30
<h3>Целочисленные</h3>
30
<h3>Целочисленные</h3>
31
<p>В C# поддерживаются девять целочисленных значений:</p>
31
<p>В C# поддерживаются девять целочисленных значений:</p>
32
<ul><li>byte;</li>
32
<ul><li>byte;</li>
33
<li>sbyte;</li>
33
<li>sbyte;</li>
34
<li>char;</li>
34
<li>char;</li>
35
<li>long;</li>
35
<li>long;</li>
36
<li>ulong;</li>
36
<li>ulong;</li>
37
<li>short;</li>
37
<li>short;</li>
38
<li>ushort;</li>
38
<li>ushort;</li>
39
<li>uuint;</li>
39
<li>uuint;</li>
40
<li>int.</li>
40
<li>int.</li>
41
</ul><p>Char будет применяться для представления символов, поэтому он обычно рассматривается отдельно. Остальные восемь целочисленных используются для числовых расчетов. Int в C# выступает самым используемым.</p>
41
</ul><p>Char будет применяться для представления символов, поэтому он обычно рассматривается отдельно. Остальные восемь целочисленных используются для числовых расчетов. Int в C# выступает самым используемым.</p>
42
<p>Ниже можно увидеть диапазоны их значений, а также разрядность в битах:</p>
42
<p>Ниже можно увидеть диапазоны их значений, а также разрядность в битах:</p>
43
<p>Отрицательные двоичные числа практически всегда представляются методом дополнения до двух. Согласно этому правилу, все двоичные разряды отрицательного числа сначала инвертируются, а затем к соответствующему числу прибавляется 1.</p>
43
<p>Отрицательные двоичные числа практически всегда представляются методом дополнения до двух. Согласно этому правилу, все двоичные разряды отрицательного числа сначала инвертируются, а затем к соответствующему числу прибавляется 1.</p>
44
<p>Int - наиболее распространенный тип. Он используется для управления массивами, циклами, а также для математических расчетов общего назначения. Если значение требуется сохранить без знака, необходимо выбрать uint. Для больших значений - со знаком long, без него - ulong.</p>
44
<p>Int - наиболее распространенный тип. Он используется для управления массивами, циклами, а также для математических расчетов общего назначения. Если значение требуется сохранить без знака, необходимо выбрать uint. Для больших значений - со знаком long, без него - ulong.</p>
45
<h3>С плавающей точкой</h3>
45
<h3>С плавающей точкой</h3>
46
<p>С их помощью можно представлять числа с дробными частями. Можно выделить double и float в C Sharp в соответствующей категории значений. Они представляют числа с двойной и одинарной точностью соответственно.</p>
46
<p>С их помощью можно представлять числа с дробными частями. Можно выделить double и float в C Sharp в соответствующей категории значений. Они представляют числа с двойной и одинарной точностью соответственно.</p>
47
<p>У float разрядность составляет 32 бита, у double - 64. Float используется для меньших значений с плавающей точкой, для которых необходима меньшая точность. Пользоваться double рекомендуется, когда нужна высокая степень точности (15 разрядов).</p>
47
<p>У float разрядность составляет 32 бита, у double - 64. Float используется для меньших значений с плавающей точкой, для которых необходима меньшая точность. Пользоваться double рекомендуется, когда нужна высокая степень точности (15 разрядов).</p>
48
<p>Если нецелочисленное значение жестко кодируется в исходном тексте, обычно компилятор предполагает, что планируется использование double. Когда значение требуется специфицировать в качестве float, к нему необходимо добавить символ f (или F).</p>
48
<p>Если нецелочисленное значение жестко кодируется в исходном тексте, обычно компилятор предполагает, что планируется использование double. Когда значение требуется специфицировать в качестве float, к нему необходимо добавить символ f (или F).</p>
49
<p>Выше - наглядный пример того, как это будет выглядеть в реализации в программном коде.</p>
49
<p>Выше - наглядный пример того, как это будет выглядеть в реализации в программном коде.</p>
50
<h3>Десятичные</h3>
50
<h3>Десятичные</h3>
51
<p>Для того, чтобы представить числа с высокой точностью, существует десятичный тип - decimal. Он используется при финансовых расчетах. Обладает разрядностью 128 бит.</p>
51
<p>Для того, чтобы представить числа с высокой точностью, существует десятичный тип - decimal. Он используется при финансовых расчетах. Обладает разрядностью 128 бит.</p>
52
<p>Decimal позволяет представлять числа с точностью до 28 десятичных разрядов. За счет этого десятичные значения используются в программном обеспечении без ошибок округления. Тип особо полезен и удобен для расчетов, которые связаны с финансами.</p>
52
<p>Decimal позволяет представлять числа с точностью до 28 десятичных разрядов. За счет этого десятичные значения используются в программном обеспечении без ошибок округления. Тип особо полезен и удобен для расчетов, которые связаны с финансами.</p>
53
<h3>Символы</h3>
53
<h3>Символы</h3>
54
<p>C# имеет отдельное "обозначение" для символов. Они представлены в этом языке программирования не 8-разрядным кодом, как в C++, а 16-разрядным - в Юникоде. В нем символьный набор настолько широк, что он охватывает символы практически из всех естественных языков на свете.</p>
54
<p>C# имеет отдельное "обозначение" для символов. Они представлены в этом языке программирования не 8-разрядным кодом, как в C++, а 16-разрядным - в Юникоде. В нем символьный набор настолько широк, что он охватывает символы практически из всех естественных языков на свете.</p>
55
<p>Чтобы представить иероглифы и некоторые мировые алфавиты, определен тип char, который представляет 16-разрядные значения без знака. Диапазон принимаемых значений составляет от 0 до 65 535. Стандартный символьный набор в 8-разрядном коде ASCII - это подмножество Юникода в пределах от 0 до 127. Это указывает на то, что в Unicode представлены и остаются действительными все ASCII.</p>
55
<p>Чтобы представить иероглифы и некоторые мировые алфавиты, определен тип char, который представляет 16-разрядные значения без знака. Диапазон принимаемых значений составляет от 0 до 65 535. Стандартный символьный набор в 8-разрядном коде ASCII - это подмножество Юникода в пределах от 0 до 127. Это указывает на то, что в Unicode представлены и остаются действительными все ASCII.</p>
56
<p>Чтобы присвоить значение символьной переменной, это значение необходимо заключить в одинарные кавычки:</p>
56
<p>Чтобы присвоить значение символьной переменной, это значение необходимо заключить в одинарные кавычки:</p>
57
<p>Выше - пример того, как соответствующий процесс будет выглядеть в программном коде. Несмотря на то, что char определен в C# как целочисленный, его не рекомендуется путать с остальными целочисленными. Связано это с тем, что в C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно.</p>
57
<p>Выше - пример того, как соответствующий процесс будет выглядеть в программном коде. Несмотря на то, что char определен в C# как целочисленный, его не рекомендуется путать с остальными целочисленными. Связано это с тем, что в C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно.</p>
58
<p>Наравне представления char как символьных литералов, их можно представить в качестве 4-разрядных шестнадцатеричных значений Юникода (пример - \u0041), целочисленных значений с приведением или шестнадцатеричных значений. Они также могут быть представлены управляющей последовательностью.</p>
58
<p>Наравне представления char как символьных литералов, их можно представить в качестве 4-разрядных шестнадцатеричных значений Юникода (пример - \u0041), целочисленных значений с приведением или шестнадцатеричных значений. Они также могут быть представлены управляющей последовательностью.</p>
59
<h3>Логические данные</h3>
59
<h3>Логические данные</h3>
60
<p>Bool предоставляет возможность использования двух логических значений:</p>
60
<p>Bool предоставляет возможность использования двух логических значений:</p>
61
<ul><li>истина (true);</li>
61
<ul><li>истина (true);</li>
62
<li>ложь (false).</li>
62
<li>ложь (false).</li>
63
</ul><p>Переменная или выражения bool будут принимать одно из представленных значений. В C# не определено взаимное преобразование логических и целых значений. Пример - 1 не может быть преобразована в true, а 0 - в значение false.</p>
63
</ul><p>Переменная или выражения bool будут принимать одно из представленных значений. В C# не определено взаимное преобразование логических и целых значений. Пример - 1 не может быть преобразована в true, а 0 - в значение false.</p>
64
<h3>Литералы</h3>
64
<h3>Литералы</h3>
65
<p>Литералы - это фиксированные значения в программе, не требующие вычислений. Они тоже присутствуют в C#. Обычно представлены как true и false, используются для инициализации переменных логического типа. Это постоянные значения, представленные в удобной для восприятия форме.</p>
65
<p>Литералы - это фиксированные значения в программе, не требующие вычислений. Они тоже присутствуют в C#. Обычно представлены как true и false, используются для инициализации переменных логического типа. Это постоянные значения, представленные в удобной для восприятия форме.</p>
66
<p>Целочисленные литералы указываются как числа без дробной части, с плавающей точкой (floating point C) - указывается точка и десятичная числовая часть. Для указания long используется суффикс l или L, беззнаковый литерал требует прибавления u или U. Float соответственно предусматривает приписку d или D, а float - f или F. Decimal обозначается как m/M.</p>
66
<p>Целочисленные литералы указываются как числа без дробной части, с плавающей точкой (floating point C) - указывается точка и десятичная числовая часть. Для указания long используется суффикс l или L, беззнаковый литерал требует прибавления u или U. Float соответственно предусматривает приписку d или D, а float - f или F. Decimal обозначается как m/M.</p>
67
<a></a>
67
<a></a>