- Примитивные типы данных в C#
- Логический тип
- Пример
- Целые числа со знаком
- 1. sbyte
- Пример
- 2. short
- Пример
- 3. int
- Пример
- 4. long
- Пример
- Целые числа без знака
- 1. byte
- Пример
- 2. ushort
- Пример
- 3. uint
- Пример
- 4. ulong
- Пример
- Числа с плавающей точкой
- 1. float
- Пример
- 2. double
- Пример
- Символьный тип (char)
- Пример
- Тип Decimal
- Пример
- Литералы
- Логические литералы
- Целочисленные литералы
- Литералы с плавающей точкой
- Символьные и строчные литералы
- Типы данных
- Примитивные типы данных языка C#
- bool
- byte
- sbyte
- ushort
- short
- uint
- int
- ulong
- long
- float
- double
- decimal
- char
- string
- object
- Неявная типизация
- Использование литеральных суффиксов
Примитивные типы данных в C#
О ссылочных типах мы поговорим в будущих уроках, но если вы хотите узнать больше о типах переменных, посетите страницу «Типы и переменные» (официальная документация C#).
Логический тип
- Возможные значения: true и false .
- Значение по умолчанию: false .
- Для чего используется: для проверки условий в if-конструкциях, циклах и т.д.
Пример
using System; namespace DataType < class BooleanExample < public static void Main(string[] args) < bool isValid = true; Console.WriteLine(isValid); >> >
Целые числа со знаком
Этот тип данных содержит целочисленные значения: как положительные, так и отрицательные. Один бит памяти, выделенной на такое значение, отводится на знак: + или — .
1. sbyte
- Размер: 8 бит.
- Допустимые значения: от -128 до 127.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class SByteExample < public static void Main(string[] args) < sbyte level = 23; Console.WriteLine(level); >> >
Попробуйте присвоить переменной значения вне ее допустимых пределов, то есть меньше -128 и больше 127 и посмотрите, что получится.
2. short
- Размер: 16 бит.
- Допустимые значения: от -32768 до 32767.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class ShortExample < public static void Main(string[] args) < short value = -1109; Console.WriteLine(value); >> >
3. int
- Размер: 32 бита.
- Допустимые значения: от -2 31 до 2 31 -1.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class IntExample < public static void Main(string[] args) < int score = 51092; Console.WriteLine(score); >> >
4. long
- Размер: 64 бита.
- Допустимые значения: от -2 63 до 2 63 -1.
- Значение по умолчанию: 0L (L в конце означает, что это значение типа long).
Пример
using System; namespace DataType < class LongExample < public static void Main(string[] args) < long range = -7091821871L; Console.WriteLine(range); >> >
Целые числа без знака
Эти типы данных содержат только значения равные или больше нуля, то есть неотрицательные значения. Если вы уверены, что код не будет пытаться присваивать переменной отрицательное значение, можете смело использовать эти типы данных.
1. byte
- Размер: 8 бит.
- Допустимые значения: от 0 до 255.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class ByteExample < public static void Main(string[] args) < byte age = 62; Console.WriteLine(level); >> >
2. ushort
- Размер: 16 бит.
- Диапазон допустимых значений: от 0 до 65535.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class UShortExample < public static void Main(string[] args) < ushort value = 42019; Console.WriteLine(value); >> >
3. uint
- Размер: 32 бита.
- Допустимые значения: от 0 до 2 32 -1.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class UIntExample < public static void Main(string[] args) < uint totalScore = 1151092; Console.WriteLine(totalScore); >> >
4. ulong
- Размер: 64 бита.
- Допустимые значения: от 0 до 2 64 -1.
- Значение по умолчанию: 0.
Пример
using System; namespace DataType < class ULongExample < public static void Main(string[] args) < ulong range = 17091821871L; Console.WriteLine(range); >> >
Числа с плавающей точкой
Эти типы данных содержат числа с плавающей точкой, то есть числа с десятичными дробями — например, 12.36, -92.17 и т.д.
1. float
- Точность: одинарная.
- Размер: 32 бита.
- Допустимые значения: от -3.4*10 38 до 3.4*10 38 .
- Значение по умолчанию: 0.0F (F на конце обозначает, что это значения типа float).
Пример
using System; namespace DataType < class FloatExample < public static void Main(string[] args) < float number = 43.27F; Console.WriteLine(number); >> >
2. double
- Точность: двойная. В чем разница между одинарной и двойной точностью.
- Размер: 64 бита.
- Допустимые значения: от ±5.0*10 -324 до ±1.7*10 308 .
- Значение по умолчанию: 0.0D (D на конце обозначает, что это значение типа double).
Пример
using System; namespace DataType < class DoubleExample < public static void Main(string[] args) < double value = -11092.53D; Console.WriteLine(value); >> >
Символьный тип (char)
- Размер: 16 бит.
- Допустимые значения: от U+0000 (‘\u0000’) до U+FFFF (‘\uffff’) — символы Unicode.
- Значение по умолчанию: ‘\0’ .
Пример
using System; namespace DataType < class CharExample < public static void Main(string[] args) < char ch1 ='\u0042'; char ch2 = 'x'; Console.WriteLine(ch1); Console.WriteLine(ch2); >> >
Значение символа ‘B’ в Юникоде — ‘\u0042’ , соответственно, если мы выводим на экран ch1 , C# напечатает ‘B’ .
Тип Decimal
Тип decimal имеет большую точность и меньший диапазон допустимых значений по сравнению с типами с плавающей точкой (double и float), поэтому этот тип данных подходит для денежных расчетов.
- Размер: 128 бит.
- Допустимые значения: от ±1.0*10 -28 до ±7.9228*10 28 .
- Значение по умолчанию: 0.0M (M на конце обозначает, что значение представляет тип decimal).
Пример
using System; namespace DataType < class DecimalExample < public static void Main(string[] args) < decimal bankBalance = 53005.25M; Console.WriteLine(bankBalance); >> >
После литерала нужно добавить M и m , иначе компилятор воспримет значение как тип double и выдаст ошибку.
Литералы
Рассмотрим следующее выражение:
Литералы — фиксированные значения в программе, они не требуют вычислений. Например, 5 , false , ‘w’ — литералы, которые возникают в программе напрямую без каких-либо вычислений.
Логические литералы
- Возможные литералы: true и false .
- Для чего используются: для инициализации переменных логического типа.
Целочисленные литералы
Литералы типа integer используются для инициализации переменных, т.е. sbyte , short , int , long , byte , ushort , uint и ulong .
Если литерал типа integer оканчивается на L или l , то его тип long.
Совет. Лучше используйте L вместо l . Последний вариант легко спутать с I .
long value1 = 4200910L; long value2 = -10928190L;
Если литерал типа integer начинается с 0x , то это шестнадцатеричное значение. Число без префиксов определяется как десятичное значение.
int decimalValue = 25; int hexValue = 0x11c; // десятичное значение — 284
Литералы с плавающей точкой
Литералы с плавающей точкой используются для инициализации переменных типов float и double.
Если литерал с плавающей точкой оканчивается суффиксом f или F , это литерал типа float. А если на d или D , это литерал типа double. Если суффикс опущен, то такой литерал считается типом double по умолчанию.
Такие литералы могут содержать e или E в экспоненциальном представлении.
double number = 24.67; // double по умолчанию float value = -12.29F; double scientificNotation = 6.21e2; // эквивалентно 6.21 x 10^2, т. е. 621
Символьные и строчные литералы
Символьные литералы используются для инициализации переменных типа char. Они заключаются в одинарные кавычки. Например, ‘x’ , ‘p’ и т.д.
Символьные литералы можно представить как символы, шестнадцатеричные управляющие последовательности, представления в unicode или числовые значения, приведенные к типу char.
char ch1 = 'R'; // символ char ch2 = '\x0072'; // шестнадцатеричная управляющая последовательность char ch3 = '\u0059'; // unicode char ch4 = (char)107; // приведение к char
Строковые литералы — набор символьных литералов.Они заключаются в двойные кавычки. Например, «Привет» , «CodeChick» и т. д.
string firstName = "Иван"; string lastName = "Иванов";
C# поддерживает следующие символы управляющих последовательностей:
Типы данных
C# является строго типизированным языком программирования. Поэтому каждая переменная и константа должна иметь тип. Как и в других языках программирования, в C# есть своя собственная система типов, которая используется при создании переменных.
- количество памяти, которая необходима для хранения переменной;
- внутреннюю структуру данных;
- минимальное и максимальное значения, которое может принимать переменная;
- методы, поля и события;
- базовый тип;
- место в памяти, где располагается переменная;
- операции которые к нему применяются.
Язык C# использует простые типы данных платформы .Net Framework, при этом в языке, для них, используются псевдонимы, по этому при рассмотрении мы будем указывать как псевдоним, так и полное название типа данных платформы .Net. Для компилятора нет разницы, какую форму записи названий вы используете.
Примитивные типы данных языка C#
bool
Полное название типа: System.Boolean
Используется для объявления переменных, в которых хранятся логические(булевы) значения true или false.
bool isEmpty = true; System.Boolean isFull = false;
byte
Полное название типа: System.Byte
Целочисленный, беззнаковый тип данных длиной в 1 байт, в котором можно хранить числа из диапазона от 0 до 255.
byte b1 = 21; System.Byte b2 = 125;
sbyte
Полное название типа: System.SByte
Целочисленный, тип данных со знаком размером в 1 байт, позволяет хранить числа от -128 до 127.
sbyte sb1 = -123; System.SByte sb2 = 42;
ushort
Полное название типа: System.UInt16
Целочисленный, тип данных без знака, длиной в 2 байта, который может хранить числа из диапазона от 0 до 65 535.
ushort num1 = 324; System.UInt16 num2 = 1024;
short
Полное название типа: System.Int16
Числовой, тип данных со знаком, размером в 2 байта, в котором можно хранить целые числа из диапазона от -32 768 до 32 767.
short sNum1 = -1995; System.Int16 sNum2 = 2048;
uint
Полное название типа: System.UInt32
Целочисленный, тип данных без знака, имеет размер — 4 байта, в котором можно хранить число из диапазона от 0 до 4 294 967 295.
uint uiNum1 = 777; System.UInt32 uiNum2 = 11231;
int
Полное название типа: System.Int32
Целочисленный, знаковый тип данных, занимает 4 байта, в котором можно расположить число от -2 147 483 648 до 2 147 483 647.
int iNum1 = -34531; System.Int32 iNum2 = 56874;
ulong
Полное название типа: System.UInt64
Целочисленный, беззнаковый, длиной в 8 байт, в котором хранят числа от 0 до 18 446 744 073 709 551 615.
ulong ulNum1 = 7878; System.UInt64 ulNum2 = 78444514;
long
Полное название типа: System.Int64
Целочисленный, знаковый тип данных, длиной в 8 байт, в котором можно хранить число из диапазона -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
long lNum1 = -12897; System.Int64 lNum2 = 56554;
float
Полное название типа: System.Single
Знаковый тип данных, размером 4 байта для хранения вещественных чисел от ±1.5 ⋅ 10 −45 до ±3.4 ⋅ 10 38
float fNum1 = -3.146; System.Single fNum2 = 12e3;
double
Полное название типа: System.Double
Знаковый тип данных, занимает 8 байт, хранения чисел с плавающей точкой ±5 ⋅ 10 −324 до ±1.7 ⋅ 10 308
double dNum1 = -22.12; System.Double dNum2 = 1.329e34;
decimal
Полное название типа: System.Decimal
Знаковый тип данных, занимает 16 байт, для хранения вещественных чисел в диапазоне от ±1 ⋅ 10 −28 до ±7.9228 ⋅ 10 28
decimal decNum1 = -12.23; System.Decimal decNum2 = 1.312e4;
В отличие от других вещественных типов данных, диапазон decimal уже, при большей точности. Благодаря этому, он идеально подходит для финансовых операций.
C# позволяет получить минимальное и максимальное значения, которое может принимать указанный тип. Минимальное значение хранится в поле – MinValue, а максимальное в – MaxValue.
Console.WriteLine(ulong.MinValue); Console.WriteLine(byte.MaxValue);
Кроме перечисленных диапазонов значений, типы с плавающей точкой float и double, могут принимать следующие:
- отрицательный и положительный ноль;
- отрицательную(NegativeInfinity) и положительную(PositiveInfinity) бесконечность;
- не числовое значение NaN (Not a Number)
char
Полное название типа: System.Char
Используется для объявления переменной, которая представляет собой один Unicode символ, занимает 2 байта в памяти.
char c1 = 'm'; char c2 = '\u263A'; System.Char tab = '\t';
string
Полное название типа: System.String
Может содержать в себе последовательность, от 0 и больше, символов Unicode формата.
string s1 = 'Hi!'; System.String s2 = 'Smile \u263A';
object
Полное название типа: System.Object
Этот тип данных является базовым(все другие от него наследуются) для всех других типов платформи .Net. Может хранить в себе значение любого другого типа данных.
object o1 = 564; System.Object o2 = "Hello";
Неявная типизация
Неявная или утиная типизация (duck typing) – типизация, при которой переменная остается строго типизированной, а её тип определяется компилятором, исходя из присваиваемого значения.
Название утиная типизация происходит от “утиного теста”:
«Если оно выглядит, плавает и крякает как утка, то наверное это и есть утка»
В версии C# 3.0 появилась возможность, неявно типизировать данные. Это позволило упростить написание и анализ кода программ, поскольку часто у классов очень длинные названия.
Для неявной типизации, вместо типа данных, указывают ключевое слово var.
Следующие две строки эквивалентны:
Для неявной типизации характерны две особенности:
- переменную необходимо инициализировать сразу после объявления;
- нельзя инициализировать переменную null-литералом(поскольку null не имеет явного типа).
Компилятор автоматически ставит тип данных int – для целых чисел, и double – для вещественных.
Использование литеральных суффиксов
При использовании неявной типизации, или перегруженных методов, которые могут принимать значения разных типов данных, время от вермени, появляется необходимость указать тип данных литерала. Для этого в C# используются литеральные суффиксы.
Тип | Суффикс | Пример использования використання |
---|---|---|
uint | U | 123U |
ulong | UL | 11UL |
long | L | 222L |
float | F | 2.2F |
double | D | 2.3D |
decimal | M | 1.2M |
Регистр написания суффиксов не важен.