Thread: Bitwise Operations to Read ON/OFF Bits

  1. #1
    Registered User
    Join Date
    Feb 2008

    Question Bitwise Operations to Read ON/OFF Bits

    I am new to C, and I'm stack on code for bitwise operation

    I need to get a function (which i have a call from main) using 3 integers to say if bits in a range are all on or off


    Number , is the integer
    X is the beginning position of the range
    Y is the ending position of the range

    so far the only solution that i thought of was:

    (((Number >> X) & 01) & ((Number >> Y) & 01))

    but it doesnt seem to work.
    Anyone able to help me?

  2. #2
    Hurry Slowly vart's Avatar
    Join Date
    Oct 2006
    Rishon LeZion, Israel
    one of the solutions - write function that checks that left n bits are all ON using bitmask tables

    unsigned char check[] = { 0x01, 0x03, 0x07, ...};
    int checkLeftBits(unsigned char value, size_t numberOfBits)
       unsigned char cleardValue = value & check[numberOfBits-1]; /* clear bits that are out of interest */
       return (cleardValue  == check[numberOfBits-1]);
    of course this sample lacks checks for suitable range of the second parameter which should be from 1 to CHAR_BITS

    the second step will be to take the original value, shift it on X bits left and based on Y-X value - decide what bytes of the number should be passed into the function above with what number of bits too check)
    All problems in computer science can be solved by another level of indirection,
    except for the problem of too many layers of indirection.
    David J. Wheeler

  3. #3
    Algorithm Dissector iMalc's Avatar
    Join Date
    Dec 2005
    New Zealand
    Lets have an example:
    Number is 0011001101011100
    X = 3
    Y = 11
    I'm starting at zero as the rightmost binary digit. You didn't give the conventions so I'll make my own. The mask we want is:

    How can we make this mask? Well...
    1<<3 == 0000000000001000
    1<<11 == 0000100000000000

    Now subtract one from those:

    Can you now see how we can get the mask using 'xor', and then solve the problem using an 'and'?
    My homepage
    Advice: Take only as directed - If symptoms persist, please see your debugger

    Linus Torvalds: "But it clearly is the only right way. The fact that everybody else does it some other way only means that they are wrong"

  4. #4
    Woof, woof! zacs7's Avatar
    Join Date
    Mar 2007

  5. #5
    Registered User
    Join Date
    Feb 2008
    Thanks all for the replies, I managed to figure it out with iMalc's help, and it works. Thanks for the help

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Bitwise Operators
    By rrc55 in forum C Programming
    Replies: 6
    Last Post: 04-30-2009, 11:37 AM
  2. SDLKey to ASCII without unicode support?
    By zacs7 in forum Game Programming
    Replies: 6
    Last Post: 10-07-2007, 03:03 AM
  3. bitwise negation problem
    By Mr_Jack in forum C++ Programming
    Replies: 4
    Last Post: 03-15-2004, 08:16 PM
  4. read bit's from any file
    By scrapedbr in forum C Programming
    Replies: 1
    Last Post: 09-30-2003, 03:12 PM
  5. Serial Communications in C
    By ExDigit in forum Windows Programming
    Replies: 7
    Last Post: 01-09-2002, 10:52 AM