Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Two C bit-operation puzzles. (http://www.go4expert.com/forums/c-bit-operation-puzzles-t8899/)

 partizan 18Feb2008 17:16

Two C bit-operation puzzles.

1. Using only bitwise operations: ! ~ & ^ | + << >> and no loops, function calls, or conditional statements count number of bits in a passed integer. Ex, bitCount(5) = 2, bitCount(7) = 3. Maximum operations allowed is 20.

2. Using only bitwise operations: ! ~ & ^ | + << >> and no loops, function calls, or conditional statements find sum of three integers using only on + operator. Ex. sum3(3, 4, 5) = 12. Maximum operations allows is 20.

For both puzzles assume that the size of int is 32bits.

 imrantechi 18Feb2008 18:17

Re: Two C bit-operation puzzles.

int bitCount(unsigned int num)
{
unsigned int n;

n = num - ((num >> 1) & 033333333333) - ((num >> 2) & 011111111111);

return ((n + (n >> 3)) & 030707070707) % 63;
}

You can search on google also.

 imrantechi 18Feb2008 18:19

Re: Two C bit-operation puzzles.

2nd puzzle i am not getting!!!

else

num1+ num2 + num3

 partizan 18Feb2008 18:25

Re: Two C bit-operation puzzles.

I need time to process first solution :)

Here is clarification on the second one

static int sum(int x, int y) {
return x+y;
}
int sum3(int x, int y, int z) {
int word1 = 0;
int word2 = 0;
/************************************************** ************
Fill in code below that computes values for word1 and word2
without using any '+' operations
************************************************** *************/

/************************************************** ************
Don't change anything below here
************************************************** *************/
return sum(word1,word2);

 partizan 18Feb2008 18:29

Re: Two C bit-operation puzzles.

Quote:
 Originally Posted by imrantechi answer of first puzzle. int bitCount(unsigned int num) { unsigned int n; n = num - ((num >> 1) & 033333333333) - ((num >> 2) & 011111111111); return ((n + (n >> 3)) & 030707070707) % 63; } You can search on google also.

There are some restrictions:
1. We are not allowed to use unsigned integers
2. You are using '-' (minus) operator (easy to substitute by [~(x) + 1] )
3. % as you may see is not allowed

But thank you for your reply, I will try to see what it does.

 partizan 18Feb2008 18:30

Re: Two C bit-operation puzzles.

sorry there was a typo in the puzzle

2. Using only bitwise operations: ! ~ & ^ | + << >> and no loops, function calls, or conditional statements find sum of three integers using only one + operator. Ex. sum3(3, 4, 5) = 12. Maximum operations allows is 20.

 partizan 18Feb2008 18:34

Re: Two C bit-operation puzzles.

Quote:
 Originally Posted by imrantechi answer of first puzzle. int bitCount(unsigned int num) { unsigned int n; n = num - ((num >> 1) & 033333333333) - ((num >> 2) & 011111111111); return ((n + (n >> 3)) & 030707070707) % 63; } You can search on google also.
when you write 033333333333 you mean 0x033.33 right
and 0x111.11 you mean 0001 0001 ... 0001 in binary. Correct?

 All times are GMT +5.5. The time now is 03:59.