Help with finding bit states?

By Justin
May 14, 2002
  1. Ok, I'm learning C++ (teaching myself). I understand code, I know HTML very well and other things, however most of what I knew was higher then C++, so I never learned how to translate that. I eventually plan to move on to Assembler, but I'd rather get c++ down first. My problem is this.

    How do I determine the state of the bits from a hex offset? For instance, if I have 0x1ff, or 0x1fe, or 0xfff, how do I determine what the bits are at that moment?

    Thanks a lot!
  2. Nodsu

    Nodsu TS Rookie Posts: 5,837   +6

    So you want to check individual bits in a number or individual bits in a bit array?

    For checking bits, you use the bitwise AND (&).

    If you want to chek for the first bit (LSB), you & the number with 0x1 (0000 0001 binary).
    If the result is zero (false), the bit was not set.

    if(chicken & 0x2) { // If bit 2 is set, do something

    For the second bit, you & the number with 0x2 (0000 0010 binary) .
    For the third bit, use constant 0x4 (0000 0100 binary).

    If you want to set bits, use the bitwise OR (|).

    Set first bit in varaible 'chicken':
    chicken |= 0x1;

    For clearing bits, AND with inversed constants.

    Clear bit #4 in 'chicken':
    chicken &= 0xF7; // 1111 0111 binary

    If you want to flip a bit, use XOR (^).
    Flip bit 2 in 'chicken':
    chicken ^= 0x2;

    Some compilers also support some less standard ways of accessing individual bits
    (Borland for example), that are somewhat simpler to use.

    If you hava a huge array of bits, and want to find the value of nth bit in that array:

    - Divide the bit offset by 8 , you'll get a byte offset to the previous byte.
    - Read the next byte.
    - Use the remainder from the division in a 'switch' to get access to individual bits.

    Of course, you could serach the net and find heaps of libraries containing functions
    to do bit manipulations and save yourself the trouble.
  3. Justin

    Justin TS Rookie Topic Starter Posts: 942

    Awesome... heh... exactly what I needed.

    That helps a lot. Thanks!
Topic Status:
Not open for further replies.

Similar Topics

Add your comment to this article

You need to be a member to leave a comment. Join thousands of tech enthusiasts and participate.
TechSpot Account You may also...