www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Is integer overflow defined?

reply Sean Eskapp <eatingstaples gmail.com> writes:
Is integer overflow defined (for instance, as being mod 2^size)? Can I
reliably say that -long.min == 0L?
Sep 01 2011
parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 09/01/2011 06:20 PM, Sean Eskapp wrote:
 Is integer overflow defined (for instance, as being mod 2^size)?

I am quite sure that all operations are defined as operations on two's complement integers, which would mean overflow is defined, but I cannot find the respective part of the specification...
 Can I reliably say that -long.min == 0L?

Well no, -long.min == long.min . according to TDPL p53., that fact is defined. (unary minus: -x == ~x+1)
Sep 01 2011
next sibling parent Sean Eskapp <eatingstaples gmail.com> writes:
== Quote from Timon Gehr (timon.gehr gmx.ch)'s article
 On 09/01/2011 06:20 PM, Sean Eskapp wrote:
 Is integer overflow defined (for instance, as being mod 2^size)?

complement integers, which would mean overflow is defined, but I cannot find the respective part of the specification... > Can I reliably say that -long.min == 0L? Well no, -long.min == long.min . according to TDPL p53., that fact is defined. (unary minus: -x == ~x+1)

Ah, good points, thanks!
Sep 01 2011
prev sibling parent reply bearophile <bearophileHUGS lycos.com> writes:
Timon Gehr:

 according to TDPL p53., that fact is defined. (unary minus: -x == ~x+1)

Uhmmmm. Bye, bearophile
Sep 01 2011
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 09/02/2011 02:45 AM, bearophile wrote:
 Timon Gehr:

 according to TDPL p53., that fact is defined. (unary minus: -x == ~x+1)

Uhmmmm. Bye, bearophile

For unsigned integers it is clearly defined: 1000... => 0111... => 1000... And according to TDPL p53: "This manipulation does not raise particular questions about the signedness of val". So, it is guaranteed that it will work for long.min .
Sep 02 2011