Для каких типов данных используются суффиксы при инициализации переменных
Как и во многих языках программирования, в C# есть своя система типов данных, которая используется для создания переменных. Тип данных определяет внутреннее представление данных, множество значений, которые может принимать объект, а также допустимые действия, которые можно применять над объектом.
В языке C# есть следующие примитивные типы данных:
bool : хранит значение true или false (логические литералы). Представлен системным типом System.Boolean
byte : хранит целое число от 0 до 255 и занимает 1 байт. Представлен системным типом System.Byte
sbyte : хранит целое число от -128 до 127 и занимает 1 байт. Представлен системным типом System.SByte
short : хранит целое число от -32768 до 32767 и занимает 2 байта. Представлен системным типом System.Int16
ushort : хранит целое число от 0 до 65535 и занимает 2 байта. Представлен системным типом System.UInt16
int : хранит целое число от -2147483648 до 2147483647 и занимает 4 байта. Представлен системным типом System.Int32 . Все целочисленные литералы по умолчанию представляют значения типа int:
uint : хранит целое число от 0 до 4294967295 и занимает 4 байта. Представлен системным типом System.UInt32
long : хранит целое число от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 и занимает 8 байт. Представлен системным типом System.Int64
ulong : хранит целое число от 0 до 18 446 744 073 709 551 615 и занимает 8 байт. Представлен системным типом System.UInt64
float : хранит число с плавающей точкой от -3.4*10 38 до 3.4*10 38 и занимает 4 байта. Представлен системным типом System.Single
double : хранит число с плавающей точкой от ±5.0*10 -324 до ±1.7*10 308 и занимает 8 байта. Представлен системным типом System.Double
decimal : хранит десятичное дробное число. Если употребляется без десятичной запятой, имеет значение от ±1.0*10 -28 до ±7.9228*10 28 , может хранить 28 знаков после запятой и занимает 16 байт. Представлен системным типом System.Decimal
char : хранит одиночный символ в кодировке Unicode и занимает 2 байта. Представлен системным типом System.Char . Этому типу соответствуют символьные литералы:
string : хранит набор символов Unicode. Представлен системным типом System.String . Этому типу соответствуют символьные литералы.
object : может хранить значение любого типа данных и занимает 4 байта на 32-разрядной платформе и 8 байт на 64-разрядной платформе. Представлен системным типом System.Object , который является базовым для всех других типов и классов .NET.
Например, определим несколько переменных разных типов и выведем их значения на консоль:
Для вывода данных на консоль здесь применяется интерполяция: перед строкой ставится знак $ и после этого мы можем вводить в строку в фигурных скобках значения переменных. Консольный вывод программы:
Использование суффиксов
При присвоении значений надо иметь в виду следующую тонкость: все вещественные литералы рассматриваются как значения типа double . И чтобы указать, что дробное число представляет тип float или тип decimal , необходимо к литералу добавлять суффикс: F/f — для float и M/m — для decimal.
Подобным образом все целочисленные литералы рассматриваются как значения типа int . Чтобы явным образом указать, что целочисленный литерал представляет значение типа uint, надо использовать суффикс U/u , для типа long — суффикс L/l , а для типа ulong — суффикс UL/ul :
Использование системных типов
Выше при перечислении всех базовых типов данных для каждого упоминался системный тип. Потому что название встроенного типа по сути представляет собой сокращенное обозначение системного типа. Например, следующие переменные будут эквивалентны по типу:
Неявная типизация
Ранее мы явным образом указывали тип переменных, например, int x; . И компилятор при запуске уже знал, что x хранит целочисленное значение.
Однако мы можем использовать и модель неявной типизации:
Для неявной типизации вместо названия типа данных используется ключевое слово var . Затем уже при компиляции компилятор сам выводит тип данных исходя из присвоенного значения. В примере выше использовалось выражение Console.WriteLine(c.GetType().ToString()); , которое позволяет нам узнать выведенный тип переменной с. Так как по умолчанию все целочисленные значения рассматриваются как значения типа int , то поэтому в итоге переменная c будет иметь тип int или System.Int32
Эти переменные подобны обычным, однако они имеют некоторые ограничения.
Во-первых, мы не можем сначала объявить неявно типизируемую переменную, а затем инициализировать:
Во-вторых, мы не можем указать в качестве значения неявно типизируемой переменной null :
Так как значение null, то компилятор не сможет вывести тип данных.
double или decimal
Из выше перечисленного списка типов данных очевидно, что если мы хотим использовать в программе числа до 256, то для их хранения мы можем использоват переменные типа byte . При использовании больших значений мы можем взять тип short, int, long. То же самое для дробных чисел — для обычных дробных чисел можно взять тип float, для очень больших дробных чисел — тип double. Тип decimal здесь стоит особняком в том плане, что несмотря на большую разрядность по сравнению с типом double, тип double может хранить большее значение. Однако значение decimal может содержать до 28 знаков после запятой, тогда как значение типа double — 15-16 знаков после запятой.
Decimal чаще находит применение в финансовых вычислениях, тогда как double — в математических операциях. Общие различия между этими двумя типами можно выразить следующей таблицей:
Источник статьи: http://metanit.com/sharp/tutorial/2.1.php
Типы данных и переменные C#
Дата изменения: 20.07.2017
C# – язык программирования со статической типизацией. То есть каждая переменная перед использованием должна быть объявлена и ей должен быть присвоен тип хранящихся в ней данных, который закрепляется за этой переменной на протяжении ее существования в программе.
Правила объявления и инициализации переменных
Переменные объявляются в следующей форме:
type variable_name; // type – тип данных, variable_name – имя переменной
При объявлении переменной за ней закрепляется тип и выделяется соответствующая область памяти.
Имя переменной должно соответствовать следующим правилам:
- Нельзя использовать зарезервированные слова языка C# в качестве имени;
- Имя может состоять из цифр, латинских букв и символа подчеркивания, но нельзя использовать цифру в качестве первого символа;
- Максимальная длина имени 255 символов;
Для дальнейшего использования переменную также нужно инициализировать – придать ей начальное значение.
Это можно сразу сделать в строке объявления при помощи оператора присваивания (=). При инициализации можно использовать не только константы, но и любые вычислительные выражения на основе объектов и операторов C#.
Примеры объявления и инициализации:
Также, при присвоении переменной значения с плавающей точкой важно знать о суффиксах. Компиляторы зачастую по умолчанию воспринимают числа с плавающей точкой как тип double. Для типа float нужно добавлять в конце f, для decimal – m, а для double – d:
Типы данных
В соответствии с особенностями использования разных областей памяти (стек и куча) и дальнейшего взаимодействия переменных, типы данных разделяют на типы значений (value type) и ссылочные типы (reference type). В таблице указаны встроенные типы в C# со ссылками на документацию MSDN.
Типы значений
Ссылочные типы
Объявление ссылочных типов
Встроенные ссылочные типы
Далее рассмотрим каждый тип значений по отдельности.
Целочисленные типы
Целочисленные типы различаются между собой объемом занимаемой памяти и диапазоном возможных значений:
Системный тип (.NET Framework)
Размер в байтах
Диапазон значений
От -2147483648 до 2147483647
От 0 до 4294967295
От -9223372036854775808 до 9223372036854775807
От 0 до 18446744073709551615
Символ Unicode, от U+0000 до U+ffff
sbyte, short, int и long являются целочисленными типами со знаком. Работая с такими числами, компилятор C# в двоичном представлении считает первый бит флагом знака: 0 – положительный, 1 – отрицательный. Чтобы представить целое число со знаком минус в таком виде, его модуль преобразуется в двоичную систему счисления, биты заменяются на противоположные, а в качестве старшего бита прибавляется единица.
Чаще всего в C# используется тип int, так как он предоставляет достаточный диапазон для большинства вычислительных нужд. Если вы точно знаете будущий диапазон значений объявляемой целочисленной переменной, в идеале стоит выбрать соответствующий тип. В ином случае, поскупившись на пару байт и, использовав short вместо int, вы рискуете появлением бага в программе.
Также целочисленным переменным можно присваивать значения в шестнадцатеричной системе счисления, используя префикс 0x. Например, так:
Отдельное внимание стоит уделить типу char, отвечающему за представление символов. Его 16-разрядный двоичный код при преобразовании в шестнадцатеричную систему счисления становится четырехзначной кодировкой символа Unicode.
Юникод охватывает символы почти всех языков мира, а так же множество спецсимволов. В десятичном представлении это целое число от 0 до 65535. Стандартный 8-битный ASCII код представляется в юникоде в оригинальном порядке от 0 до 127 (т.е. от U+0000 до U+007f). Символьные значения присваиваются при помощи одинарных кавычек:
Типы чисел с плавающей запятой
Типов с плавающей запятой всего два:
Системный тип (.NET Framework)
Источник статьи: http://brainoteka.com/blogs/c-spravochnik/tipi-dannih-i-peremennie-c