Counting Bits To Left/Right in 32-bit Integer Using Bit Operations

  • Thread starter Thread starter noblerare
  • Start date Start date
  • Tags Tags
    Bit Counting
AI Thread Summary
The discussion revolves around counting the number of bits to the left and right of a '1' in a 32-bit integer using only bit operations, without employing loops or conditional statements. An example provided is the number 32 (0b100000), which has 5 bits to the right and 26 to the left of the '1'. Participants express difficulty in finding a solution that adheres to these constraints, with references to existing solutions that utilize loops. Suggestions include exploring various techniques from a linked resource that may offer alternative methods without loops. The focus remains on achieving the task strictly through bit manipulation operations.
noblerare
Messages
49
Reaction score
0

Homework Statement



I am wondering is there a way to count the number of bits to the left or right of a given 1 in a 32-bit integer?

For example, if I give the function the number 32 = 0b100000, there are 5 bits to the right of the 1 and hence, 26 bits to the left of the 1.

The catch is, is there a way to do this by simply using bit operations? i.e. no loops or conditionals? Bit operations include: & ^ | << >> ! and ~

(Note: I am coding this in C)

The Attempt at a Solution



Obviously, if I subtract 1 from the original number, I get all 1s to the right of the original number but I'm still stumped as to how I can count the actual number of bits without using loops or conditional statements.
 
Physics news on Phys.org
Thanks, but the link you posted has the solution using a for loop.

Is there a way to do this without using loops or conditional statements? Simply using bit operations such as << >> ! ~ & | ^
 
Not the kernighan solution - but the ones below it (that was the only entry that had an index position)
 
Read on in the page that mgb_phys linked to. The very first routine uses a for loop, but there are other techniques on the page that don't use loops.
 
Back
Top