Search
View source code
Display the source code in core/checkedint.d from which this page was generated on github.
Report a bug
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

# Function `core.checkedint.addu`

Add two unsigned integers, checking for overflow (aka carry).

``` uint addu (   uint x,   uint y,   ref bool overflow ); ulong addu (   ulong x,   ulong y,   ref bool overflow ); ```

The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.

## Parameters

NameDescription
x left operand
y right operand
overflow set if an overflow occurs, is not affected otherwise

the sum

## Example

``````for (uint i = 0; i < 10; ++i)
{
bool overflow;
immutable uint r = addu (uint.max - i, uint.max - i, overflow);
writeln(r); // 2 * (uint.max - i)
assert (overflow);
}

bool overflow;
assert(!overflow);

writeln(addu(1, uint.max - 1, overflow)); // uint.max
assert(!overflow);

assert(!overflow);

assert(overflow);

overflow = false;
writeln(addu(uint.min + 1, -1, overflow)); // uint.min
assert(overflow);

assert(overflow);                   // sticky
``````

## Example

``````bool overflow;
assert(!overflow);

writeln(addu(1, ulong.max - 1, overflow)); // ulong.max
assert(!overflow);

assert(!overflow);

assert(overflow);

overflow = false;
writeln(addu(ulong.min + 1, -1L, overflow)); // ulong.min
assert(overflow);

assert(overflow);                   // sticky
``````

Walter Bright