Reduced bit number in short

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Philipp

    Reduced bit number in short

    Hello
    I'm working on a piece of code which I did not write and it has
    variables defined as:

    unsigned short i:13;
    unsigned short j:13;
    unsigned short k:3;

    As I understand the code, this means that i is reduced to being coded on
    13 bits (same for j) and k is reduced to 3 bits.
    1) Is my understanding right?
    2) Is there any documentation on this ":" operator somewhere (I could
    not find anything by searching the web)

    Thank you for your answers Phil
  • Ron Natalie

    #2
    Re: Reduced bit number in short


    "Philipp" <nospam_kitsche n@hotmail.com> wrote in message news:408fe268$1 @epflnews.epfl. ch...[color=blue]
    > Hello
    > I'm working on a piece of code which I did not write and it has
    > variables defined as:
    >
    > unsigned short i:13;
    > unsigned short j:13;
    > unsigned short k:3;
    >
    > As I understand the code, this means that i is reduced to being coded on
    > 13 bits (same for j) and k is reduced to 3 bits.
    > 1) Is my understanding right?
    > 2) Is there any documentation on this ":" operator somewhere (I could
    > not find anything by searching the web)
    >[/color]

    Look up "bitfield" (or perhaps "bit field") in your C text.

    : here isn't an operator, it's part of the declaration syntax. Bitfields are a bit funky.
    It is used to carve up an integral type into smaller pieces. The packing of the bits
    into the larger type is extremely machine dependent.

    Comment

    • Bill Seurer

      #3
      Re: Reduced bit number in short

      Philipp wrote:
      [color=blue]
      > 2) Is there any documentation on this ":" operator somewhere (I could
      > not find anything by searching the web)[/color]

      Search on "bit fields"

      Comment

      • Jacek Dziedzic

        #4
        Re: Reduced bit number in short

        Ron Natalie wrote:
        [color=blue]
        > "Philipp" <nospam_kitsche n@hotmail.com> wrote in message news:408fe268$1 @epflnews.epfl. ch...
        >[color=green]
        >>Hello
        >>I'm working on a piece of code which I did not write and it has
        >>variables defined as:
        >>
        >> unsigned short i:13;
        >> unsigned short j:13;
        >> unsigned short k:3;
        >>
        >>As I understand the code, this means that i is reduced to being coded on
        >>13 bits (same for j) and k is reduced to 3 bits.
        >>1) Is my understanding right?
        >>2) Is there any documentation on this ":" operator somewhere (I could
        >>not find anything by searching the web)
        >>[/color]
        >
        >
        > Look up "bitfield" (or perhaps "bit field") in your C text.
        >
        > : here isn't an operator, it's part of the declaration syntax. Bitfields are a bit funky.
        > It is used to carve up an integral type into smaller pieces. The packing of the bits
        > into the larger type is extremely machine dependent.[/color]

        Whoa, what are these? I've never seen a thing like that before! :).
        Is this Standard C++, or C perhaps? Or a relic of some sorts like
        the auto keyword? My compiler gives a "declaratio n syntax error" for:

        // ---
        int main() {
        unsigned short k:13;
        }
        // ---

        Can anybody shed some light on this?

        TIA,
        - J.

        Comment

        • Old Wolf

          #5
          Re: Reduced bit number in short

          Jacek Dziedzic <jacek__NOSPAM_ _@janowo.net> wrote :[color=blue]
          > Ron Natalie wrote:[color=green]
          > > "Philipp" <nospam_kitsche n@hotmail.com> wrote:
          > >[color=darkred]
          > >>Hello
          > >>I'm working on a piece of code which I did not write and it has
          > >>variables defined as:
          > >>
          > >> unsigned short i:13;
          > >> unsigned short j:13;
          > >> unsigned short k:3;
          > >>[/color]
          > > Look up "bitfield" (or perhaps "bit field") in your C text.[/color][/color]

          Actually you need to look up "bit-field", if searching the Standard
          [color=blue]
          > Whoa, what are these? I've never seen a thing like that before! :).
          > Is this Standard C++, or C perhaps? Or a relic of some sorts like
          > the auto keyword? My compiler gives a "declaratio n syntax error" for:
          >
          > // ---
          > int main() {
          > unsigned short k:13;
          > }[/color]

          They've been in C for decades but are not widely used. They are only
          valid within structs or unions, which is why your code is an error.
          Also, bit-fields must be _Bool, int, unsigned int, or signed int,
          although it's a common extension to allow "unsigned short" etc.

          In the original example, if unsigned short has at least 29 bits,
          then there will only be 1 actual unsigned short in the struct,
          and "i", "j" and "k" will be packed into it, and whenever you use
          i,j,k in expressions, the compiler automatically twiddles the bits.
          Otherwise they would be packed into 2 unsigned shorts.

          Probably why they are unpopular is that you can't do 'sizeof' on them
          and you can't take their address (hence, you can't pass pointers to
          them to a function, for example), and the packing method is
          implementation-defined. I don't think anyone would really mind if
          they were deprecated.

          Comment

          • Jack Klein

            #6
            Re: Reduced bit number in short

            On Wed, 28 Apr 2004 23:01:59 +0200, Jacek Dziedzic
            <jacek__NOSPAM_ _@janowo.net> wrote in comp.lang.c++:
            [color=blue]
            > Ron Natalie wrote:
            >[color=green]
            > > "Philipp" <nospam_kitsche n@hotmail.com> wrote in message news:408fe268$1 @epflnews.epfl. ch...
            > >[color=darkred]
            > >>Hello
            > >>I'm working on a piece of code which I did not write and it has
            > >>variables defined as:
            > >>
            > >> unsigned short i:13;
            > >> unsigned short j:13;
            > >> unsigned short k:3;
            > >>
            > >>As I understand the code, this means that i is reduced to being coded on
            > >>13 bits (same for j) and k is reduced to 3 bits.
            > >>1) Is my understanding right?
            > >>2) Is there any documentation on this ":" operator somewhere (I could
            > >>not find anything by searching the web)
            > >>[/color]
            > >
            > >
            > > Look up "bitfield" (or perhaps "bit field") in your C text.
            > >
            > > : here isn't an operator, it's part of the declaration syntax. Bitfields are a bit funky.
            > > It is used to carve up an integral type into smaller pieces. The packing of the bits
            > > into the larger type is extremely machine dependent.[/color]
            >
            > Whoa, what are these? I've never seen a thing like that before! :).
            > Is this Standard C++, or C perhaps? Or a relic of some sorts like
            > the auto keyword? My compiler gives a "declaratio n syntax error" for:
            >
            > // ---
            > int main() {
            > unsigned short k:13;
            > }
            > // ---
            >
            > Can anybody shed some light on this?[/color]

            Bit-fields have been part of C for about 30 years now, before the
            publication of the first edition of K&R. They have been part of C++
            since its beginning.

            But they cannot be used as stand-along objects, only as members of
            structs and (in C++ only, of course) classes.

            Any decent book on C or C++ should cover them.

            --
            Jack Klein
            Home: http://JK-Technology.Com
            FAQs for
            comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
            comp.lang.c++ http://www.parashift.com/c++-faq-lite/
            alt.comp.lang.l earn.c-c++

            Comment

            • Philipp

              #7
              Re: Reduced bit number in short

              Thank you all for your answers.
              Phil

              Comment

              • Jacek Dziedzic

                #8
                Re: Reduced bit number in short

                Jack Klein wrote:[color=blue]
                >
                > Bit-fields have been part of C for about 30 years now, before the
                > publication of the first edition of K&R. They have been part of C++
                > since its beginning.
                >
                > But they cannot be used as stand-along objects, only as members of
                > structs and (in C++ only, of course) classes.
                >
                > Any decent book on C or C++ should cover them.
                >[/color]

                Thanks a lot to both of you!

                - J.

                Comment

                Working...