unsigned interger overflow
qznc
qznc at web.de
Wed Oct 2 01:51:42 PDT 2013
On Wednesday, 2 October 2013 at 05:41:50 UTC, Jonathan M Davis
wrote:
> On Wednesday, October 02, 2013 12:32:24 Alexandr Druzhinin
> wrote:
>> Is it safe to replace code:
>>
>> uint index;
>> // do something
>> index++;
>> if(index == index.max)
>> index = index.init;
>>
>> by the following code
>> uint index;
>> // do something
>> index++; /// I use unsigned int so uint.max changed to 0
>> automagically
>
> Well, not quite. Your first one skips uint.max. It goes from
> uint.max - 1 to 0,
> whereas the second one goes from uint.max to 0. So, they're
> subtly different.
> But yes, incrementing the maximum value of an unsigned integral
> type is
> guaranteed to wrap around to 0. Signed integers are of course
> another matter
> entirely, but it's guaranteed to work with unsigned integers.
For signed integers there seems to be no clear consensus [0],
although personally I would read the spec [1] as wrapping happens
for int as well:
"If both operands are of integral types and an overflow or
underflow occurs in the computation, wrapping will happen."
I also consider it reasonable, since every architecture uses
2s-complement.
[0] http://forum.dlang.org/thread/jo2c0a$31hh$1@digitalmars.com
[1] http://dlang.org/expression.html
More information about the Digitalmars-d-learn
mailing list