Я новичок в C# и хочу понять, как работают ценности. Если я посмотрю на нормальное целочисленное значение, в нем есть 3 важные части: тип, имя и значение.C# суффикс за цифровым литералом
int testInt = 3;
| | |
Type Name Value
Но когда я вижу значение с плавающей запятой, что меня смущает немного из-за суффикса F
.
float testFloat = 3.0F;
| | | |
Type Name Value Type
В настоящее время существует два типа в нем, и без суффикса F
значение будет двойным. Но почему это происходит, когда я могу объявить двойную переменную с
double testDouble = 3.0D;
double
как первое слово должно быть достаточно, не так ли? То же самое для десятичного значения с индексом М:
decimal testDecimal = 3.0M;
Затем он начинает действительно смущать меня, когда речь идет о других суффиксов:
ulong bigOne = 2985825802805280508UL;
Я использовал ulong
в тесте до и знаю, что u
для «без знака» и позволяет значение в два раза выше, чем обычно. Затем вы получаете U снова как суффикс, а L - буквально, как сказал google. Насколько я понимаю, «литералы» - это типы значений, которые содержат числа. Но я не понимаю, почему этот улунг работает даже без суффикса?
ulong bigOne = 2985825802805280508;
Тогда я пытался что-то другое, чтобы понять важность суффикса
byte testLong = 12312UL;
Это не работает, потому что слишком большое значение для байта (254), а суффикс не преобразует его в длинная переменная.
Почему не первое слово (тип) недостаточно для объявления? Первое слово должно быть достаточно, чтобы указать тип. Лучше ли всегда давать значения суффикс?
Вы правы, одно объявление типа достаточно, если есть также задание. Вот почему ключевое слово var было добавлено в C#: https://msdn.microsoft.com/en-us/library/bb383973.aspx – Max
'U' для неподписанных, а не неназначенных. –
А как насчет расчетов вроде 4.0/3? Следует ли использовать одинарную или двойную точность? Это действительно влияет на результат. Или рассмотрите 2000000000 * 3? Это переполнение или просто длинное? Вы не всегда напрямую назначаете значения. – dryman