Книга: C# для профессионалов. Том II
Простые типы
Разделы на этой странице:
Простые типы
Ранее в разделе о ключевых словах было сделано подробное сравнение между примитивными типами данных Java и их эквивалентами в C# (по размеру). Был также введен ряд типов данных значений, представленных в C#, которых Java не имеет. Это были 8-битовый без знака byte
(отличный от
byte в Java, который имеет знак и отображается в sbyte
в C#), короткое целое без знака ushort
, целое без знака uint
, длинное целое без знака ulong
и, наконец, высокоточное decimal
.
Целые значения
Когда целое число не имеет суффикса, то тип, с которым может быть связано его значение, оценивается в порядке int
, uint
, long
, ulong
, decimal
. Целые значения представляются как десятичные или шестнадцатеричные литералы. В коде ниже результат равен 52 для обоих значений:
int dec = 52;
int hex = 0x34;
Console.WriteLine("decimal {0}, hexadecimal {1}", dec, hex);
Символьные значения
char
представляет одиночный символ Unicode длиной два байта. C# расширяет гибкость присваивания символов, допуская присваивание с помощью шестнадцатеричной кодированной последовательности с префиксом х
и представление Unicode с помощью u
. Также нельзя неявно преобразовать символы в целые числа. Все другие обычные кодированные последовательности языка Java полностью поддерживаются.
Логические значения
bool
, boolean
в Java, используются для представления значений true
и false
непосредственно или как результат равенства, как показано ниже:
bool first_time = true;
cool second_time = (counter < 0);
Значения decimal
C# вводит тип данных decimal
, который является 128-битовым типом данных, представляющим значения в диапазоне от примерно 1.0?1028 до 7.9?1028. Они предназначены прежде всего для финансовых и денежных вычислений, где точность является предельно важной. При присваивании типу decimal
значения, к литеральному значению должно добавляться m
, иначе компилятор считает значение типом double
. Так как decimal
не может неявно преобразовываться в double
, то отсутствие m требует явного преобразования типа:
decimal precise = 1.234m;
decimal precise = (decimal)1.234;
Значения с плавающей точкой
Значения с плавающей точкой могут быть либо double
, либо float
. При вычислениях все другие простые типы значений будут неявно преобразовываться, в соответствующий тип с плавающей точкой, если присутствует тип с плавающей точкой. Действительный числовой литерал с правой стороны оператора присваивания интерпретируется как double
по умолчанию. Так как не существует неявного преобразования из float
в double
, может оказаться удивительным возникновение ошибок компиляции. Пример ниже иллюстрирует эту проблему:
float f = 5.6;
Console.WriteLine(x);
Этот пример будет создавать сообщение об ошибке компиляции, показанное ниже.
C:_wroxc# for java developerscodeSuperEXClass1.cs(15): Literal of type double cannot De implicitly converted to type 'float'; use an 'F' suffix to create a literal of this type
Существует два способа решения этой проблемы. Можно преобразовать литерал во float
, но сам компилятор предлагает более разумную альтернативу. Использование суффикса F
говорит компилятору, что это литерал типа float
, а не double
. Хотя и не обязательно, но можно использовать суффикс D
, чтобы указать на литерал типа Double
.
- 2. ТИПЫ
- 2.1. Простые типы
- Типы данных float и double
- Типы данных
- Принцип № 3: продвигайте простые, выполнимые типы поведения – по одному
- A6.4. Типы с плавающей точкой
- Типы значений в C#
- 6.6. Простые примеры
- Типы данных для работы с датой и временем
- Большие целые типы
- Типы страниц и их использование
- 1.2.3. Константы, переменные и типы