471,612 Members | 2,203 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,612 software developers and data experts.

Can negating a non-negative signed integer value ever overflow?

Can negating a non-negative signed integer value ever overflow? Put another
way, can it be true that (mathematically) INT_MIN > -INT_MAX, LONG_MIN
-LONG_MAX etc?


I know that typically it can't overflow, but if that isn't guaranteed, how
can I portably detect if it would?

Alex
Mar 6 '06 #1
8 2265
On 2006-03-06, Alex Fraser <me@privacy.net> wrote:
Can negating a non-negative signed integer value ever overflow? Put another
way, can it be true that (mathematically) INT_MIN > -INT_MAX, LONG_MIN
-LONG_MAX etc?


I know that typically it can't overflow, but if that isn't guaranteed, how
can I portably detect if it would?

Alex


C99 only allows twos-complement, ones-complement, and signed-magnitude
representation. It is unclear what C89 allows.
Mar 6 '06 #2
Alex Fraser wrote:

Can negating a non-negative signed integer value ever overflow?


No.

--
pete
Mar 6 '06 #3
"Jordan Abel" <ra*******@gmail.com> wrote in message
news:sl***********************@random.yi.org...
On 2006-03-06, Alex Fraser <me@privacy.net> wrote:
Can negating a non-negative signed integer value ever overflow? Put
another way, can it be true that (mathematically) INT_MIN > -INT_MAX,
LONG_MIN > -LONG_MAX etc?
C99 only allows twos-complement, ones-complement, and signed-magnitude
representation.


Which implies INT_MIN is either -INT_MAX (one's complement or sign and
magnitude) or -INT_MAX - 1 (two's complement), etc, so that's OK.
It is unclear what C89 allows.


Hmm. A shame.

I know it normally can't overflow, and I can't see how to detect if it
could/would overflow anyway, so I guess should shrug my shoulders and move
on :).

Thanks,
Alex
Mar 7 '06 #4
pete wrote:
Alex Fraser wrote:
Can negating a non-negative signed integer value ever overflow?

No.

No context? Chuck is gonna getcha.

Assume 2's complement.

int i = INT_MIN;

This is -2147483648 and 0x80000000. If then..

i = -i;

...the result is the same. Did anything happen? Was it overflow?

--
Joe Wright
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Mar 7 '06 #5
Joe Wright said:
pete wrote:
Alex Fraser wrote:
Can negating a non-negative signed integer value ever overflow?

No.

No context? Chuck is gonna getcha.

Assume 2's complement.

int i = INT_MIN;

This is -2147483648 and 0x80000000. If then..

i = -i;

..the result is the same. Did anything happen? Was it overflow?


This may have escaped your notice, I know - but -2147483648 does not quite
qualify as non-negative, so it falls outside the domain of the question.

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)
Mar 7 '06 #6
Joe Wright <jo********@comcast.net> writes:
pete wrote:
Alex Fraser wrote:
Can negating a non-negative signed integer value ever overflow?

No.

No context? Chuck is gonna getcha.


What do you mean? pete quoted the relevant portion of the parent
article, including the attribution line, and answered the question.
(And Richard already pointed out your other error.)

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Mar 7 '06 #7
Keith Thompson wrote:
Joe Wright <jo********@comcast.net> writes:
pete wrote:
Alex Fraser wrote:

Can negating a non-negative signed integer value ever overflow?
No.

No context? Chuck is gonna getcha.


What do you mean? pete quoted the relevant portion of the parent
article, including the attribution line, and answered the question.
(And Richard already pointed out your other error.)


Yes, I saw no reason to unleash the slavering dogs.

--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson
More details at: <http://cfaj.freeshell.org/google/>
Also see <http://www.safalra.com/special/googlegroupsreply/>
Mar 8 '06 #8
CBFalconer wrote:
Keith Thompson wrote:
Joe Wright <jo********@comcast.net> writes:
pete wrote:

Alex Fraser wrote:
>Can negating a non-negative signed integer value ever overflow?

No.
No context? Chuck is gonna getcha.


What do you mean? pete quoted the relevant portion of the parent
article, including the attribution line, and answered the question.
(And Richard already pointed out your other error.)

Yes, I saw no reason to unleash the slavering dogs.

Sorry pete. Thanks Richard, Keith and Chuck for catching me up. I read
pete's one liner as..
"Can negating a negative signed integer value ever overflow?"

--
Joe Wright
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Mar 8 '06 #9

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Mario | last post: by
25 posts views Thread by Yves Glodt | last post: by
32 posts views Thread by Adrian Herscu | last post: by
14 posts views Thread by Patrick Kowalzick | last post: by
399 posts views Thread by =?UTF-8?B?Ik1hcnRpbiB2LiBMw7Z3aXMi?= | last post: by
12 posts views Thread by puzzlecracker | last post: by
1 post views Thread by XIAOLAOHU | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.