Я экспериментировал сегодня с тем, как компилятор определяет типы для чисел, объявленных как var
.
var a = 255; //Type = int. Value = byte.MaxValue. Why isn't this byte?
var b = 32767; //Type = int. Value = short.MaxValue. Why isn't this short?
var c = 2147483647; //Type = int. Value = int.MaxValue. int as expected.
var d = 2147483648; //Type = uint. Value = int.MaxValue + 1. uint is fine but could have been long?
var e = 4294967296; //Type = long. Value = uint.MaxValue + 1. Type is long as expected.
Почему int
по умолчанию для любого числа, которое находится между Int32.MinValue
и Int32.MaxValue
?
Не лучше ли использовать наименьший возможный тип данных для экономии памяти?(Я понимаю, что в наши дни память дешева, но, тем не менее, экономить память не так уж и плохо, особенно если это так легко сделать).
Если компилятор действительно использовал наименьший тип данных, и если у вас былпеременная с 255 и знала, что позже вы захотите сохранить значение типа 300, тогда программист может просто объявить его short
вместо использования var
.
Почему var d = 2147483648
неявно uint
а не long
?
Похоже, что компилятор всегда будет пытаться использовать 32-разрядное целое число, если он может, сначала подписанный, затем беззнаковый, затем long
.