comp.lang.ada
 help / color / mirror / Atom feed
From: Georg Bauhaus <rm.dash-bauhaus@futureapps.de>
Subject: Re: How to put 200 into an integer sub-type of 16 bits (code included)
Date: Wed, 14 Jan 2009 11:08:39 +0100
Date: 2009-01-14T11:08:39+01:00	[thread overview]
Message-ID: <496db9a7$0$32672$9b4e6d93@newsspool2.arcor-online.net> (raw)
In-Reply-To: <3d3719f4-355c-4094-9902-495d612d46fe@n33g2000pri.googlegroups.com>

ChristopherL schrieb:
> On Jan 13, 9:33 pm, Brian Drummond <brian_drumm...@btconnect.com>
> wrote:
>> what are you really trying to do?
>>
>> - Brian
> 
> 
> What I want to do is this. I have a variable holding the base 10 value
> 200. It has a certain bit representation. If the variable was an
> integer of 16 bits it's representation would be something such as
> 0000000011001000. For give me if I'm wrong. Anyway, what I'd like to
> do is put that exact bit representation in another variable of a
> different type.
> 
> How do I proceed?

You use an instance of Unchecked_Conversion, as explained.

Consider choosing your types (by declaring them, preferably)
just like you need them. Avoid predefined types like the plague.
Yes. There is an exception: there are type that are intended for
directly manipulating machine words or machine registers with
no other intention than to manipulate bits in ways that are
neither numeric nor reflecting Boolean logic.

Forgive me if I'm wrong, but you types' names sound like C's,
and the approach also reminds me of what might be a reasonable
way to do it in C. It is worth while giving Ada's fundamental
type system a chance. It is never necessary to make assumptions
about the bit size of a number.  Give the range of numbers
that your(!) data type needs, exactly, in a subtype constraint.
If needed, request a size for this type, as explained
in another post.

> I was thinking of trying to do it with code such as the below. The
> below code is not mine and came from this group. So, tomorrow I am
> planning on modifying my first example above to use the below code.
> What are my chances of doing it?
> 
> Thanks,
> Chris L.
> 
> with TEXT_IO;
> with UNCHECKED_CONVERSION;
> procedure UNCHECK_DEMO is
> package INT_IO is new TEXT_IO.INTEGER_IO(LONG_LONG_INTEGER);
> function INT_TO_FLT is
> new UNCHECKED_CONVERSION(
> SOURCE => LONG_LONG_INTEGER,
> TARGET => FLOAT);
> INT : LONG_LONG_INTEGER;

Beware that type Long_Long_Integer is neither a standard
Ada type (in that an implementation need not provide it,
see RM 3.5.4 Integer Types), nor are its objects guaranteed to
have the size you'd expect them to have.  Use representation
clauses as outlined by Ludovic if you really need tight control
over bit representation.

> FLT : FLOAT;

Your compiler might warn you in case the two types
you pass to Unchecked_Conversion do not match.
See:
http://en.wikibooks.org/wiki/Ada_Programming/Type_System#Unchecked_conversion

> begin
> INT:=2#11111111100000000000000000000000#;

This value might be inacceptable all Ada compilers;
the non-standard name

> FLT:=INT_TO_FLT(INT);
> INT_IO.put(INT,0,2);
> end;



  parent reply	other threads:[~2009-01-14 10:08 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <407ae64d-3cb3-4310-b59e-f1bbae9910a5@t39g2000prh.googlegroups.com>
2009-01-14  1:33 ` How to put 200 into an integer sub-type of 16 bits (code included) Brian Drummond
     [not found]   ` <3d3719f4-355c-4094-9902-495d612d46fe@n33g2000pri.googlegroups.com>
2009-01-14  9:06     ` Ludovic Brenta
2009-01-14 10:08     ` Georg Bauhaus [this message]
2009-01-14 10:29       ` Georg Bauhaus
2009-01-14 12:47     ` Brian Drummond
2009-01-14 12:53     ` Brian Drummond
     [not found]       ` <f4894476-851e-493f-93a2-168976bd97fb@s1g2000prg.googlegroups.com>
2009-01-14 16:08         ` Adam Beneschan
     [not found]           ` <139961e9-bae6-4e60-8ff7-4f4779b27481@z6g2000pre.googlegroups.com>
2009-01-14 20:41             ` Adam Beneschan
     [not found]               ` <c265ffb7-6159-4d85-b259-78b830e115f9@v18g2000pro.googlegroups.com>
2009-01-15  2:39                 ` SteveD@teranews.com
     [not found]               ` <3625f980-4406-4f51-b494-dd4a48cab840@p36g2000prp.googlegroups.com>
2009-01-15  6:53                 ` Michael Bode
2009-01-15  8:57                   ` Martin
     [not found]               ` <fc154f52-7168-447a-bcd3-6ece9066ebf7@r37g2000prr.googlegroups.com>
2009-01-15 10:29                 ` Georg Bauhaus
     [not found]               ` <1a2b31ac-cf6b-44e3-85b7-04594460db87@d36g2000prf.googlegroups.com>
2009-01-14 22:47                 ` Adam Beneschan
2009-01-14 23:11                 ` Ludovic Brenta
2009-01-15  9:56                 ` Stuart
2009-01-15 12:40                 ` Stuart
2009-01-15 14:02                 ` Stephen Leake
2009-01-15 15:54                   ` Dmitry A. Kazakov
2009-01-15 16:29                     ` Hyman Rosen
2009-01-15 22:15                       ` Dmitry A. Kazakov
2009-01-16  9:11                         ` Jacob Sparre Andersen
2009-01-16 11:03                           ` Mike H
2009-01-16 22:16                           ` Brian Drummond
2009-01-14 21:32             ` sjw
2009-01-14 21:51             ` Brian Drummond
2009-01-14 21:17           ` sjw
2009-01-14 18:49     ` Jeffrey R. Carter
2009-01-15 10:12       ` Quote of the Day (Re: " Peter Hermann
2009-01-14 21:09   ` sjw
2009-01-14 21:16     ` Adam Beneschan
2009-01-14 23:09       ` Martin
2009-01-15  0:07         ` Adam Beneschan
2009-01-15  3:09           ` Randy Brukardt
2009-01-15 16:28             ` Adam Beneschan
2009-01-15 21:21               ` Robert A Duff
2009-01-16  1:17                 ` Adam Beneschan
2009-01-16 14:55                   ` Robert A Duff
2009-01-15 14:44     ` Brian Drummond
     [not found]       ` <3f1f2f67-5d69-4baf-8e8c-0d2b5f68475f@p36g2000prp.googlegroups.com>
2009-01-15 16:36         ` How to put 200.0 (is float variable of 32 bits) into an integer sub-type of 10 bits (complete program included) Adam Beneschan
     [not found]         ` <8e64f509-f6fe-4d86-ae1a-fe0b1c88555a@v5g2000pre.googlegroups.com>
2009-01-15 17:09           ` christoph.grein
2009-01-15 17:17             ` Adam Beneschan
2009-01-15 17:29               ` Georg Bauhaus
     [not found]                 ` <09b4a056-688d-49c8-b935-fa0b30f1ae84@w1g2000prk.googlegroups.com>
2009-01-15 18:40                   ` Mike H
     [not found]                     ` <be26729d-9458-42fa-8c8c-004ca33b790d@f33g2000vbf.googlegroups.com>
2009-01-15 20:57                       ` Niklas Holsti
     [not found]                 ` <97231951-54a0-4df7-bb73-04261b34287f@e6g2000vbe.googlegroups.com>
2009-01-16  3:17                   ` Steve D
     [not found]             ` <a61abb30-bc60-4d13-b298-f369ddc8f741@z6g2000pre.googlegroups.com>
2009-01-15 18:15               ` Martin
2009-01-15 18:34               ` Stuart
2009-01-15 17:23           ` Georg Bauhaus
     [not found]         ` <d3b7ad53-af51-4ac5-9167-7cb99e61b2b1@v5g2000pre.googlegroups.com>
2009-01-15 17:50           ` Stuart
     [not found] <6c7964a6-1733-434b-b1b1-962baa4ebba2@p23g2000prp.googlegroups.com>
2009-01-13 21:01 ` How to put 200 into an integer sub-type of 16 bits (code included) Ludovic Brenta
replies disabled

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