866 views

What will be returned by the following function foo when called as foo(10)?

int foo(int n)
{
return n & n | 1;
}

1 comment

10 in binary form is 1010

n=1010

we have to calculate => n&n|1 = (n & n)  | 1  = (1010 & 1010) | 0001 = 1010 | 0001 = 1011 = 11(in decimal).

so the ans is 11.

& : Bitwise AND operator
| : Bitwise OR operator

int foo(int n)
{
return n & n | 1;
}

return n & n | 1;
here precedence of &>| so n&n will be executed 1st.
n&n = n

Now, n|1 which is nothing but n+1 for even n (least bit 0) and n for odd n.

For foo(10), 11 will be output.


can you please explain binary operations in some detail ?

@Digvijay

I think we cant say here :-> foo(int n) it will return n+1 as ur statement ( n|1 which is nothing but n+1.) is seeming me wrong.

Bcz suppose  n=11 means foo(11)

n&n=n=00001011

now n|1=00001011 | 00000001 = 00001011=n=11 itself.

so foo(11) will return 11 ; not 12.

plz correct me :)

yes, you are correct..
foo will return 11

because 10 &10 will return 10

and logical OR will return 10I1 means 10+1=11

10 bitwise-AND 10 bitwise-OR 1

=> 1010 AND 1010 OR 0001 in binary

=> 1010 OR 0001

=> 1011

=> 11 in decimal.

I think in OR we stop the computation after we encounter TRUE(1) for the 1st argument.

1
500 views