Instead of error, why don't both operands get promoted to float or double?
<p>1) If one operand is of type <code>ulong</code>, while  the other operand is of type <code>sbyte/short/int/long</code>, then compile-time error occurs. I fail to see the logic in this. Thus, why would it be bad idea for both operands to instead be promoted to type <code>double</code> or <code>float</code>?</p>

<pre><code>        long L = 100;
        ulong UL = 1000;
        double d = L + UL; // error saying + operator can't be applied
                              to operands of type ulong and long
</code></pre>

<p>b) Compiler implicitly converts <code>int</code> literal into <code>byte</code> type and assigns resulting value to <code>b</code>:</p>

<pre><code>byte b = 1;
</code></pre>

<p>But if we try to assign a literal of type <code>ulong</code> to type <code>long</code>(or to types <code>int</code>, <code>byte</code> etc), then compiler reports an error:</p>

<pre><code>long L = 1000UL;
</code></pre>

<p>I would think compiler would be able to figure out whether result of constant expression could fit into variable of type <code>long</code>?! </p>

<p>thank you</p>
