* bool: 1 байт - логическое значение, true или false. * byte: 1 байт - целое число, от 0 до 255. * sbyte: 1 байт - целое число, от -128 до 127. * char: 2 байта - символ Unicode, от U+0000 до U+FFFF. * short: 2 байта - целое число, от -32,768 до 32,767. * ushort: 2 байта -целое число, от 0 до 65,535. * int: 4 байта - целое число, от -2,147,483,648 до 2,147,483,647. * uint: 4 байта - целое число, от 0 до 4,294,967,295. * float: 4 байта - число с плавающей точкой одинарной точности, от -3.4 x 10^38 до 3.4 x 10^38, с 7 значащими цифрами. * double: 8 байтов - число с плавающей точкой двойной точности, от примерно -5.0 x 10^324 до примерно 1.7 x 10^308, с 15-16 значащими цифрами. * long: 8 байтов - целое число, от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807. * ulong: 8 байтов - целое число, от 0 до 18,446,744,073,709,551,615. * decimal: 16 байтов - десятичное число с плавающей точкой, от примерно -7.9 x 10^28 до примерно 7.9 x 10^28, с 28-29 значащими цифрами. Обратите внимание, что есть и другие типы в C#, такие как string, object, Array, List\<T>, Dictionary\<TKey, TValue> и т.д., но их размер и диапазон значений могут варьироваться в зависимости от содержимого. Буквы S или U могут встречаться в названии типа, чтобы показать к чему относиться тип. - Signed - это тип, который может хранить в себе как положительное, так и отрицательное число. - Unsigned - только положительное. ##### Сколько занимает место string с одним символом? В C# `string` является ссылочным типом данных, и размер строки зависит от количества символов в ней, а также от некоторого дополнительного пространства, которое требуется для хранения метаданных строки. Каждый символ в строке `string` в C# представлен в Unicode и занимает 2 байта. Кроме того, для каждого экземпляра `string` требуется дополнительное пространство для хранения длины строки и некоторых других служебных данных. Это обычно 20 байтов на 64-битной платформе и 8-12 байтов на 32-битной платформе. Так что для строки `string` с одним символом вам потребуется примерно 22 байта на 64-битной платформе и примерно 10-14 байтов на 32-битной платформе. Обратите внимание, что это приближенные значения, и фактическое использование памяти может немного отличаться в зависимости от реализации .NET и платформы, на которой она выполняется. ##### Что будет если число int, которое почти является максимальной для твоего типа, умножить на 31, и в результате умножения, число получится больше максимального значения типа int? В языке C# это приведет к переполнению (overflow), и результатом будет число, которое "оборачивается вокруг" и начинается с минимального значения для типа int. Концепция переполнения применима ко всем числовым типам данных в C# и большинстве других языков программирования. Это происходит из-за того, что тип int в C# является знаковым целым числом, которое может содержать значения от -2,147,483,648 до 2,147,483,647. Когда вы превышаете максимальное значение, число "оборачивается" и начинается с минимального значения. Это называется "переполнением". Вот пример того, что произойдет: ```csharp int max = int.MaxValue; // 2147483647 int result = max * 31; // -31, due to integer overflow ``` В этом случае, result будет равно -31, а не числу, большему 2,147,483,647. Важно отметить, что поведение при переполнении может варьироваться в зависимости от настроек вашего кода и компилятора. В C# можно использовать ключевые слова checked и unchecked, чтобы контролировать, должно ли возникать исключение при переполнении.