By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,267 Members | 1,808 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,267 IT Pros & Developers. It's quick & easy.

Reduced bit number in short

P: n/a
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
Jul 22 '05 #1
Share this Question
Share on Google+
7 Replies


P: n/a

"Philipp" <no*************@hotmail.com> wrote in message news:40********@epflnews.epfl.ch...
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)


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.

Jul 22 '05 #2

P: n/a
Philipp wrote:
2) Is there any documentation on this ":" operator somewhere (I could
not find anything by searching the web)


Search on "bit fields"
Jul 22 '05 #3

P: n/a
Ron Natalie wrote:
"Philipp" <no*************@hotmail.com> wrote in message news:40********@epflnews.epfl.ch...
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)

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.


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 "declaration syntax error" for:

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

Can anybody shed some light on this?

TIA,
- J.
Jul 22 '05 #4

P: n/a
Jacek Dziedzic <ja*************@janowo.net> wrote :
Ron Natalie wrote:
"Philipp" <no*************@hotmail.com> wrote:
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;
Look up "bitfield" (or perhaps "bit field") in your C text.


Actually you need to look up "bit-field", if searching the Standard
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 "declaration syntax error" for:

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


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.
Jul 22 '05 #5

P: n/a
On Wed, 28 Apr 2004 23:01:59 +0200, Jacek Dziedzic
<ja*************@janowo.net> wrote in comp.lang.c++:
Ron Natalie wrote:
"Philipp" <no*************@hotmail.com> wrote in message news:40********@epflnews.epfl.ch...
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)

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.


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 "declaration syntax error" for:

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

Can anybody shed some light on this?


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.learn.c-c++
http://www.contrib.andrew.cmu.edu/~a...FAQ-acllc.html
Jul 22 '05 #6

P: n/a
Thank you all for your answers.
Phil
Jul 22 '05 #7

P: n/a
Jack Klein wrote:

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.


Thanks a lot to both of you!

- J.
Jul 22 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.