bitcount: Given x, set y to the number of bits in x that are 1. Write the code in Java. Provided input(s): x Permitted: 40 operations (may use !, ~, +, -, <<, >>, &, ^, |) Hint: The obvious solution would be something like ans=0; for(int i=0; i<32; i+=1) { a += x&1; x >>=1; } We don’t allow for loops, but even if you replace it with 32 copies that’s still 96 operations, and we only allow 40 for this task. The trick is to do things in parallel, treating a number like a vector of smaller numbers. Suppose I wanted to count the bits of an 8-bit number with bits abcdefgh. With a little shifting and masking I could make three numbers 0b00e00h 0a00d00g 0000c00f and add them to get xx0yy0zz where xx = a+b, yy = c+d+e, and zz = f+g+h. Extending this trick to several rounds on 32 bits will solve this problem.
bitcount: Given x, set y to the number of bits in x that are 1. Write the code in Java.
Provided input(s): x
Permitted: 40 operations (may use !, ~, +, -, <<, >>, &, ^, |)
Hint: The obvious solution would be something like
We don’t allow for loops, but even if you replace it with 32 copies that’s still 96 operations, and we only allow 40 for this task.
The trick is to do things in parallel, treating a number like a
and add them to get xx0yy0zz where xx = a+b, yy = c+d+e, and zz = f+g+h.
Extending this trick to several rounds on 32 bits will solve this problem.
Trending now
This is a popular solution!
Step by step
Solved in 4 steps with 2 images