Why do i need to wrap this code in a cast to short?

.net, c#, casting

Solution

Because there's no "short - short" operator. Both operands are promoted to int.

From section 7.7.5 of the C# 3 spec:

The predefined subtraction operators are listed below. The operators all subtract y from x.

Integer subtraction:

int operator –(int x, int y);
uint operator –(uint x, uint y);
long operator –(long x, long y); 
ulong operator –(ulong x, ulong y);

In a checked context, if the difference is outside the range of the result type, a System.OverflowException is thrown.

(And then there's floating point subtraction.)

Problem

If i have some code like the following: ``` short myShortA = 54; short myShortB = 12; short myShortC = (short)(myShortA - myShortB); ``` Both operands are shorts and it's going into a short so why do i have to cast it?

Original source