HTML Diff
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). Дополнительный заголовочный файл &lt;stdbool.h&gt; определит для него псевдоним bool, а также макросы true (истина) и false (ложь).</p>
26 <p>В C99 был добавлен еще один тип. Он называется логическим (_Bool). Дополнительный заголовочный файл &lt;stdbool.h&gt; определит для него псевдоним 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>