comp.lang.ada
 help / color / mirror / Atom feed
From: Fritz Wuehler <fritz@spamexpire-201205.rodent.frell.theremailer.net>
Subject: Re: condition true or false? ->  (-1 < sizeof("test"))
Date: Tue, 22 May 2012 19:56:13 +0200
Date: 2012-05-22T19:56:13+02:00	[thread overview]
Message-ID: <dccd9839026945deb8c541082e5cda14@msgid.frell.theremailer.net> (raw)
In-Reply-To: jpfnqe$8t4$2@dont-email.me

"BartC" <bc@freeuk.com> wrote:

> "Nomen Nescio" <nobody@dizum.com> wrote in message
> news:eb42d1e8b4d1e87bc804d05ec6964bc3@dizum.com...
> > glen herrmannsfeldt <gah@ugcs.caltech.edu> wrote:
> 
> >> I don't know how ADA treats signed values, or how its bitwise
> >> operators work. This is still posted to the ADA group, though.
> >
> > I'm not an expert on this but Ada is very strongly (statically) typed.
> > There
> > are only two integer types in Ada to start with, signed integer and
> > modular
> > integer. The compiler will flag an error if you try to compare variables
> > of
> > those two types or indeed variables of any differing types.
> 
> Signed and modular is a better way of explaining how C treats these types,
> with a clear distinction between them.

That's only partially true from an Ada perspective. For one thing, Ada
allows you to specify a range for modular types (and for integer types as
well) so you (and the compiler) actually know what modulo you are using. In
C, if you assign a negative or invalid value to an unsigned int I believe
the result you get depends on the C implementation and execution platform.
In Ada, the result should be consistent across all implementations and
platforms.

> Signed types clearly should be the primary way to represent actual integer
> quantities as most of us think of them. A signed integer range can represent
> any positive value (given enough bits); an unsigned range can't represent
> any positive or  negative value (not with a finite number of bits anyway).

I don't agree with this because in many practical cases unsigned integers
are more meaningful (counters, for example) and also extend the useful range
of machines with small word sizes. If really depends on your application.

> That's why it's odd that when there is any hint of a unsigned operand, C
> should switch to modular arithmetic for both.

I agree. It's the opposite of what you would expect. It seems to me unsigned
integers should probably be promoted to signed integer to be the most useful
but of course you will also need some way to handle overflows.

> With the new-unsigned type, a negation operation must have signed result
> (because, other than -0, it will be negative). While subtraction would need
> to be signed too, as results can be negative. And of course there is the 
> likelihood of overflow or underflow, for which I will leave to other 
> language proposals to deal with..




  parent reply	other threads:[~2012-05-22 17:57 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <95634f38f6ee0d116da523fdc2c9f5ca@dizum.com>
2012-05-21 15:28 ` condition true or false? -> (-1 < sizeof("test")) Nomen Nescio
2012-05-21 15:37   ` Richard Maine
2012-05-21 15:45   ` Adam Beneschan
2012-05-21 17:16     ` Robert A Duff
2012-05-22  1:08   ` Terence
2012-05-22  7:54     ` Les Neilson
2012-05-22 23:19       ` Terence
2012-05-23  7:20         ` Les Neilson
2012-05-22 15:43     ` Fritz Wuehler
2012-05-22  1:45   ` glen herrmannsfeldt
2012-05-22  6:11     ` Nomen Nescio
2012-05-22  8:00       ` Martin
2012-05-22  9:55       ` BartC
2012-05-22 12:07         ` Dmitry A. Kazakov
2012-05-22 16:25           ` BartC
2012-05-22 17:03             ` Dmitry A. Kazakov
2012-05-22 17:26               ` BartC
2012-05-22 18:18                 ` Dmitry A. Kazakov
2012-05-23  7:26                   ` Terence
2012-05-22 17:56         ` Fritz Wuehler [this message]
2012-05-22 10:29     ` Georg Bauhaus
2012-05-30  3:22   ` robin.vowels
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox