Следующее всегда будет истинным в C #:
sbyte 8 бит со знаком, 1 байт
байт 8-бит без знака, 1 байт
короткий подписанный 16 бит, 2 байта
ushort 16 бит без знака, 2 байта
int со знаком 32 бита, 4 байта
uint без знака 32 бита, 4 байта
длинный подписанный 64 бита, 8 байтов
ulong без знака 64 бита, 8 байтов
Целое число литерал - это просто последовательность цифр (например, 314159
) без любого из этих явных типов. C # присваивает ему первый тип в последовательности ( int , uint , long , ulong ), в которую он помещается. Похоже, это было слегка запутано, по крайней мере, в одном из ответов выше.
Странно унарный оператор минус (знак минус), появляющийся до того, как строка цифр не уменьшает выбор до ( int * 1059) *, long ). Буква всегда положительна; знак минус действительно оператор. Так что, предположительно, -314159
- это точно то же самое, что -((int)314159)
. За исключением, по-видимому, особого случая, чтобы получить -2147483648
прямо в int ; в противном случае это было бы -((uint)2147483648)
. Что я предполагаю, делает что-то неприятное.
Каким-то образом можно с уверенностью предсказать, что C # (и его друзья) никогда не будут беспокоиться о типах "мягких имен" для> = 128-битных целых чисел. Мы получим хорошую поддержку для произвольно больших целых чисел и сверхточную поддержку для UInt128, UInt256 и т. Д., Как только процессоры будут поддерживать столь широкую математику и вряд ли когда-либо будут ее использовать. 64-битные адресные пространства действительно большие. Если они когда-либо слишком малы, это будет по какой-то эзотерической причине, например, ASLR или более эффективному MapReduce или что-то в этом роде.