Portability of uint over/underflow behavior

Nick Sabalausky a at a.a
Mon Jan 5 06:20:47 PST 2009


"Don" <nospam at nospam.com> wrote in message 
news:gjsnf2$26g4$1 at digitalmars.com...
> bearophile wrote:
>> Don:
>>> The question was about incrementing uint, not int. Preventing wraparound 
>>> on uints would break everything!
>>
>> If optional runtime overflow controls are added to integral values, then 
>> they are performed on ubyte/ushort/uint/ulong/ucent too, because leaving 
>> a hole in that safety net is very bad and useless.
>
> But uints HAVE no overflow! In the case of an int, you are approximating a 
> mathematical infinite-precision integer. An overflow means you went 
> outside the available precision.
> A uint is quite different.
> uint arithmetic is perfectly standard modulo 2^32 arithmetic.
> Don't be confused by the fact that many people use them as approximations 
> to infinite-precision positive integers. That's _not_ what they are.
>

A uint is an int with the domain of possible values shifted by +uint.max/2 
(while retaining binary compatibility with the overlapping values, of 
course). Modulo 2^32 arithmetic is just one possible use for them. For other 
uses, detecting overflow can be useful.





More information about the Digitalmars-d mailing list