On 07/03/2011 16:40, Jesse Phillips wrote:
KennyTM~ Wrote:

On Mar 7, 11 18:33, Eugene wrote:
Hi!

What I want to do is pretty simple.  I need to subtract a ubyte from a
ubyte and store the result in a ubyte.  The problem is that DMD
implicitly wants to convert the ubytes into an integer, so it fails
when attempting to store the result into a ubyte.  (Int cannot be
converted to ubyte?)

I've been bitten by that annoyance while doing Java stuff in the past.
http://d.puremagic.com/issues/show_bug.cgi?id=1977

<snip>
Not only that but the operation isn't any safer than a cast, if overflow didn't 
matter
and you just need it to fit then this would be good.

Lastly overflow does matter and if it happens the code will continue to 
silently work.
I recommend using std.conv.to because it will throw an exception if an overflow 
were to
happen.

If overflow of a ubyte matters, surely so does overflow of an int or long?

In the OP's case, the only possible overflow is a negative result. As such, if overflow matters, one will do something like

    if (u2 < u1) {
        // ...
    } else {
        u3 = cast(ubyte) (u2 - u1);
    }

For such simple cases as this, using a library function to convert an overflow into an exception might be overkill.

Stewart.

Reply via email to