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

Discussion in 'C Programming' started by Alex Fraser, Mar 6, 2006.

1. ### Alex FraserGuest

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

Alex Fraser, Mar 6, 2006

2. ### Jordan AbelGuest

On 2006-03-06, Alex Fraser <> 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.

Jordan Abel, Mar 6, 2006

3. ### peteGuest

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

No.

--
pete

pete, Mar 6, 2006
4. ### Alex FraserGuest

"Jordan Abel" <> wrote in message
news:...
> On 2006-03-06, Alex Fraser <> 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

Alex Fraser, Mar 7, 2006
5. ### Joe WrightGuest

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 ---

Joe Wright, Mar 7, 2006
6. ### Richard HeathfieldGuest

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)

Richard Heathfield, Mar 7, 2006
7. ### Keith ThompsonGuest

Joe Wright <> 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

--
Keith Thompson (The_Other_Keith) <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.

Keith Thompson, Mar 7, 2006
8. ### CBFalconerGuest

Keith Thompson wrote:
> Joe Wright <> 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

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

CBFalconer, Mar 8, 2006
9. ### Joe WrightGuest

CBFalconer wrote:
> Keith Thompson wrote:
>
>>Joe Wright <> 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

>
>
> 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 ---

Joe Wright, Mar 8, 2006