Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Jul 2003 20:46:51 +0200
From:      Stefan Farfeleder <stefan@fafoe.narf.at>
To:        David Leimbach <leimy2k@mac.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: GCC 3.3.1, new warnings with <limits>
Message-ID:  <20030713184651.GB586@wombat.fafoe.narf.at>
In-Reply-To: <6B36552C-B55F-11D7-BE3B-0003937E39E0@mac.com>
References:  <20030713000559.28c18be6.kabaev@mail.ru> <20030713044331.GA89785@crodrigues.org> <20030713152154.GA96653@stack.nl> <20030713.121125.54936166.imp@bsdimp.com> <6B36552C-B55F-11D7-BE3B-0003937E39E0@mac.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jul 13, 2003 at 01:25:45PM -0500, David Leimbach wrote:
> 
> On Sunday, July 13, 2003, at 1:11PM, M. Warner Losh wrote:
> 
> >In message: <20030713152154.GA96653@stack.nl>
> >            Jilles Tjoelker <jilles@stack.nl> writes:
> >: The compiler moans about (T)(-1) >= 0 as well. Is the assumption that
> >: (unsigned type)(-1) is never zero valid?
> >
> >yes.  There are no known machines where -1 == 0 for types of different
> >signs.  Further, the C standard says that it must behave as if it is a
> >two's complement machine, and I think that C++ says so too.
> >
> 
> I am pretty certain you can do one's compliment in the C99 standard, 
> and that
> some of that is implementation/platform dependant.

<snip>

You seem to be confused.  While signed integers certainly can use the
one's complement representation, the conversion of an negative value to
an unsigned type is a different matter.  The relevant quote from C99 is:

6.3.1.3 Signed and unsigned integers

2 Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
  subtracting one more than the maximum value that can be represented in the new type
  until the value is in the range of the new type.49)

Regards,
Stefan Farfeleder



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030713184651.GB586>