Но почему я могу просто назначить его на long?
11.2.3 из spe c заявляет:
Implicit numeric conversions
The implicit numeric conversions are:
• From sbyte to short, int, long, float, double, or decimal.
• From byte to short, ushort, int, uint, long, ulong, float, double, or decimal.
• From short to int, long, float, double, or decimal.
• From ushort to int, uint, long, ulong, float, double, or decimal.
• From int to long, float, double, or decimal.
• From uint to long, ulong, float, double, or decimal.
• From long to float, double, or decimal.
• From ulong to float, double, or decimal.
• From char to ushort, int, uint, long, ulong, float, double, or decimal.
• From float to double.
Conversions from int, uint, long, or ulong to float and from long or ulong to double may cause a loss of precision, but will never cause a loss of magnitude. The other implicit numeric conversions never lose any information.
From int to long, float, double, or decimal.
является уместным здесь. По умолчанию 0 равно int
, поэтому его можно неявно преобразовать в long
.
Есть ли разница между присвоением 0 и 0L переменной типа long?
Они будут вести себя точно так же. ИЛ точно такой же.