Другие языки программирования и технологии

C# почему когда создаю тип данных byte - он его автоматически преобразовывает в тип int?

Пишу вот простой код:
byte Masha = 10;
byte Petya = 10 * 4;
byte Vanya = Masha + Petya; // ошибка без явного преобразования
А вот так ошибки нету:
byte Masha = 10;
byte Petya = 10 * 4;
byte Vanya =(byte) (Masha + Petya);
Зачем преобразовывать значение int в byte, если я тип указываю byte? что за хрень?
MA
Mohd Abdelkader
405
Значит есть на то причины. Видимо, целое по умолчанию 32 бита. Следуй правилам компилятора и будет тебе счастье. 10 и 4 это же значения без типа, они явно воспринимаются не как байт. А скорее не они сами, а результат операции (для большей точности).
Андрей Лидер
Андрей Лидер
80 386
Лучший ответ
Mohd Abdelkader Это понятно, я просто начал изучать и хочу просто всё понимать до мельчайших деталей, поэтому спрашиваю. Это всегда int тип по умолчанию?
а с плавающей запятой вроде double?
Юра Михальский > Значит есть на то причины.
"Я ничего не знаю, но чего-нибудь напишу, чтобы мне ещё баллов добавили"
----------------------------------------------------------------------------------------------
Standard ECMA-334
C# Language Specification

4th edition (June 2006)

14.7.4 Addition operator
For an operation of the form x + y, binary operator overload resolution (§14.2.4) is applied to select a specific operator implementation. The operands are converted to the parameter types of the selected operator, and the type of the result is the return type of the operator.
The predefined addition operators are listed below. For numeric and enumeration types, the predefined addition operators compute the sum of the two operands. When one or both operands are of type string, the predefined addition operators concatenate the string representation of the operands.
• Integer addition:
int operator +(int x, int y);
uint operator +(uint x, uint y);
long operator +(long x, long y);
ulong operator +(ulong x, ulong y);
void operator +(long x, ulong y);
void operator +(ulong x, long y);
----------------------------------------------------------------------------------------------

Как видишь, оператора, принимающего и возвращающего byte нет. Аргументы типа byte преобразуются к int и вызывается оператор, возвращающий int.