Is there any reason why arithmetic operation on shorts and bytes return int?

Rene Zwanenburg renezwanenburg at gmail.com
Tue Dec 11 06:55:59 PST 2012


On Tuesday, 11 December 2012 at 13:24:59 UTC, d coder wrote:
>> No, it's a fix of a gotcha from C. The C code would just allow 
>> the
>> assignment.
>
>
> Yes Andrei.
>
> But it does not look clean if you have to write:
>
> byte a, b, c;
> a = cast(byte) (b + c);
>
> Well I know the advantages (safety). But imagine having to 
> write all that
> when working with bytes and shorts. Makes it really difficult 
> to work with
> shorts and bytes in D. Would I be asking for too much if I ask 
> DMD to
> provide a compiler flag that makes it return bytes and shorts 
> for
> operations on them? So the deal would be, if you use this 
> compiler flag,
> code behavior would be different from that of C/C++.
>
> What we get would be more practical short and byte behavior.
>
> Regards
> - Puneet

If the compiler can statically verify that some integer value 
fits in a byte or short, you don't need the cast. So to rewrite 
your example:

byte a, b, c;
a = (b + c) & 0xFF;

Also:
short a;
byte b, c;
a = b + c;

Still not exactly what you're looking for, but the mask looks 
nicer than a cast IMO. It's also safer.


More information about the Digitalmars-d mailing list