This is the FAQ in the C # tag, it's hard to find a duplicate. First of all, you need a stock. The main reason is that the CLI indicates only a limited number of valid types for the Opcodes.Add IL command. Only operands such as Int32, Int64, Single, Double, and IntPtr are supported. IntPtr is also special, C # prohibits the use of this.
Thus, the C # compiler must use implicit conversion to raise the byte to the type supported by the operator. It will display Int32 as the closest compatible type. The result of the addition is Int32. Which does not fit back into the byte, without trimming the result, discarding the extra bits. An obvious example is 255 + 1, the result is 256 in Int32, but does not match the byte and gives 0 when saved.
In this problem, the language developers did not like the truncation to happen without you, clearly recognizing that you know the consequences. The cast is required to convince the compiler that you know. Of course, a bit of a blacksmith, as a rule, you make castings without thinking about the consequences. But this makes your problem, not Microsoft :)
The cutting operator was the + = operator, a very good operator for writing the compaction code. Compatible with the multiplicity of the var keyword. Scala and a difficult place, however, where did you put the cast? It just doesn't work, so they scared the problem and resolved truncation without casting.
It is known how VB.NET works; it does not require a cast. But it gives a guarantee that C # does not provide a default, it throws an OverflowException when the result does not fit. Pretty nice, but this check does not come for free.
The development of pure languages ββis a very difficult problem. The C # team did an excellent job, the warts could not stand it. Otherwise, the kind of warts caused by the design of the processor. IL has such type restrictions because it is what real 32-bit processors have, especially in RISC designs that were popular in the 90s. Their internal registers can only process IEEE-754 32-bit integers and floating points. And only smaller types are allowed in loads and shops. The Intel x86 core is very popular and actually allows you to perform basic operations with smaller types. But this is mainly a historical accident due to the fact that Intel supports a design that is compatible with 8-bit 8080 and 16-bit generations of 8086. It does not come for free, 16-bit operations require an additional processor cycle. It should be avoided.