From: Steve Graegert <graegerts@gmail.com>
To: "Robert P. J. Day" <rpjday@mindspring.com>
Cc: linux-c-programming@vger.kernel.org
Subject: Re: union versus bit manipulation
Date: Tue, 14 Jun 2005 22:03:17 +0200 [thread overview]
Message-ID: <6a00c8d5050614130372a5a289@mail.gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.61.0506140858190.18849@localhost.localdomain>
On 6/14/05, Robert P. J. Day <rpjday@mindspring.com> wrote:
>
> looking for advice on the following issue. some code i've inherited
> defines an unsigned 16-bit value that's meant to be interpreted in the
> following way in terms of the internal bit structure:
>
> 1-bit class
> 2-bit type
> 13-bit value
>
> however, in addition to needing to access the individual components of
> this object, the code (sadly) also needs to treat the whole thing as
> an unsigned 16-bit value to use as a key into a larger data structure.
>
> at the moment, defining the whole thing as an unsigned 16-bit object
> and using bit operations works fine, but i was considering redefining
> the type to use a union thusly:
>
> union thing {
> uint16_t thingval ;
> struct S {
> unsigned val : 13 ;
> unsigned type : 2 ;
> unsigned class : 1 ;
> } s ;
> } ;
>
>
> the major problems i see are that 1) i'd obviously need to guarantee
> that the fields in the struct are packed to make sure they still
> correspond to the appropriate 16-bit value, and 2) i need to make it
> portable across different endian architectures (i'm compiling the code
> on am x86 for a Power PC board).
>
> given the cautions associated with structure packing and alignment,
> as well as endianness, is it even worth the trouble to think of
> something like this? or should i just leave the object as a uint16_t
> and stick with the bit operations?
>
> rday
>
> p.s. i can guarantee that i'll be using gcc to compile, which has
> some support for forcing packing, but i'm not sure at this point it's
> worth the trouble. thoughts?
Robert,
I can't see a benefit in a transition from uint16_t to a "union
thing". You already mentioned important issues and since bit fields
are not universally portable I don't think its worth the effort. Bit
operations on simple types are a convenient solution.
Kind Regards
\Steve
--
Steve Graegert <graegerts@gmail.com> || <http://www.technologies.de/~sg/>
Independent Software Consultant {C/C++ && Java && .NET}
Mobile: +49 (176) 21 24 88 69
Office: +49 (9131) 71 26 40 9
next prev parent reply other threads:[~2005-06-14 20:03 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-14 13:07 union versus bit manipulation Robert P. J. Day
2005-06-14 20:03 ` Steve Graegert [this message]
2005-06-15 2:35 ` Glynn Clements
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6a00c8d5050614130372a5a289@mail.gmail.com \
--to=graegerts@gmail.com \
--cc=linux-c-programming@vger.kernel.org \
--cc=rpjday@mindspring.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.