comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: How do you bitwise operations in Ada '83 and '95
Date: Fri, 21 Jul 2006 14:09:04 +0200
Date: 2006-07-21T14:09:04+02:00	[thread overview]
Message-ID: <71nkuwdmd7v5.xs4ho9ifpcfx$.dlg@40tude.net> (raw)
In-Reply-To: ur70fp9dx.fsf@acm.org

On Fri, 21 Jul 2006 05:58:18 -0400, Stephen Leake wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> 
>> On Thu, 20 Jul 2006 05:03:23 -0400, Stephen Leake wrote:
>>
>>> Marius Amado-Alves <marius@amado-alves.info> writes:
>>> 
>>>> Note that I don't do bit shifting. Instead I multiply or divide by a
>>>> magnitude. I don't think bit shifting is portable.
>>> 
>>> See LRM B.2, Interfaces.Shift_Left, Shift_Right, Rotate_Left, Rotate_Right.
>>
>> Hmm, it reads (Ada 95):
>>
>> "{shift} {rotate} For each such modular type in Interfaces, shifting and
>> rotating subprograms as specified in the declaration of Interfaces above.
>> These subprograms are Intrinsic. They operate on a bit-by-bit basis, using
>> the binary representation of the value of the operands to yield a binary
>> representation for the result."
>>
>> That looks non-portable to me.
>>
>> Here is my definition of "portable":
>>
>> Let T is a modular type Unsigned_n compiled on two different machines. For
>> any valid X of T the result of Shift_Left (X, m) yields same numerical
>> value on both machines.
>>
>> I don't know if that was overlooked or that was an intent of language
>> designers to get at the underlying machine representation. Probably the
>> latter. I'm not a language lawyer, though.
> 
> I'm missing something here. Assuming machines A and B both have
> Unsigned_16, please show me an Ada statement that produces
> different results on the two machines.
> 
> I can see shift/rotate is non-portable if machine B doesn't have
> Unsigned_16, but otherwise I don't see the problem.
> 
> Hmm. I suppose if machine A is one's complement, and machine B is
> two's compliment? No, the Unsigned bit representation is still the
> same; that's why these operations are not defined on signed types.

It depends on endianness. Provided that storage elements are octets on both 
machines, which assumption could be wrong, 128 shifted left might yield  0,
256 or even 64 (what is "left"?).

When considering *any* thinkable architecture, it might be even impossible 
to implement Shift_* at all. Let some crazy hardware store numbers in only 
odd bits, reserving even ones for something else (like a check-sum). On 
such imaginary hardware Shift_Left (*, 1) wouldn't even yield a valid 
number! Actually "they operate on a bit-by-bit basis" is quite hazy. What 
is bit? Which bits are adjacent? How are they ordered? What does "left" 
mean? Which bits are of the number? etc.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2006-07-21 12:09 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <9315684D-C216-4EDA-8852-0A6BD4C275B0@amado-alves.info>
2006-07-19 22:30 ` How do you bitwise operations in Ada '83 and '95 Marius Amado-Alves
2006-07-20  7:40   ` Georg Bauhaus
2006-07-20  9:29     ` Colin Paul Gloster
2006-07-20 12:31       ` Georg Bauhaus
2006-07-20 13:08         ` Colin Paul Gloster
2006-07-20 13:29           ` Marius Amado-Alves
2006-07-20 13:49           ` Georg Bauhaus
2006-07-21  5:23             ` Colin Paul Gloster
2006-07-21  8:00               ` Georg Bauhaus
2006-07-20  9:03   ` Stephen Leake
2006-07-20  9:38     ` Marius Amado-Alves
2006-07-21  9:53       ` Stephen Leake
2006-07-20 11:31     ` Dmitry A. Kazakov
2006-07-20 13:18       ` Marius Amado-Alves
2006-07-21  9:58       ` Stephen Leake
2006-07-21 12:09         ` Dmitry A. Kazakov [this message]
2006-07-21 19:03           ` Simon Wright
2006-07-22  8:32             ` Dmitry A. Kazakov
2006-07-22  8:57               ` Simon Wright
2006-07-22 10:52               ` Georg Bauhaus
2006-07-22 13:31                 ` Dmitry A. Kazakov
     [not found] <CD6E3BB8-52D2-4EED-A790-0184FE56A99A@amado-alves.info>
2006-07-20 20:41 ` Marius Amado-Alves
2006-07-20 23:13   ` Randy Brukardt
2006-07-21  5:38     ` Marius Amado-Alves
2006-07-21 22:09       ` Randy Brukardt
     [not found] <BFF12262-F906-4F9A-B867-D0373609F038@amado-alves.info>
2006-07-20 16:40 ` Marius Amado-Alves
2006-07-20  9:39 Fwd: " Marius Amado-Alves
2006-07-20 17:54 ` tmoran
2006-07-20 18:30   ` Marius Amado-Alves
2006-07-20 19:36     ` tmoran
2006-07-20 22:09       ` Simon Wright
2006-07-21 10:07         ` Stephen Leake
2006-07-21 19:09           ` Simon Wright
2006-07-21 19:45             ` tmoran
2006-07-23 15:59             ` Stephen Leake
2006-07-24  6:08               ` Simon Wright
     [not found] <1153244316.853254.291560@m79g2000cwm.googlegroups.com>
2006-07-18 18:45 ` Robert A Duff
2006-07-18 18:53 ` jimmaureenrogers
2006-07-18 19:22   ` Jeffrey R. Carter
2006-07-18 21:32     ` jimmaureenrogers
2006-07-19  0:40       ` Jeffrey R. Carter
2006-07-19  3:55         ` jimmaureenrogers
2006-07-19  4:37           ` Jeffrey R. Carter
2006-07-19 13:05             ` jimmaureenrogers
2006-07-19 19:43               ` Jeffrey R. Carter
     [not found]             ` <1153313832.389434.144930@s13g2000cwa.googlegroups.com>
2006-07-19 13:55               ` Georg Bauhaus
2006-07-19 14:20               ` Robert A Duff
2006-07-19 19:30               ` Jeffrey R. Carter
2006-07-19 14:41             ` Robert A Duff
2006-07-18 19:21 ` Jeffrey R. Carter
2006-07-19  3:01 ` tmoran
replies disabled

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