in Programming in C retagged by
1,350 views
5 votes
5 votes

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

int foo(int n)
{
    return n & n | 1;
}
in Programming in C retagged by
by
1.4k views

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.
0
0

4 Answers

8 votes
8 votes
Best answer
& : 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.
edited by

3 Comments

can you please explain binary operations in some detail ?
0
0

@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 :)

8
8
yes, you are correct..
1
1
1 vote
1 vote
foo will return 11

because 10 &10 will return 10

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

10 bitwise-AND 10 bitwise-OR 1

=> 1010 AND 1010 OR 0001 in binary

=> 1010 OR 0001

=> 1011

=> 11 in decimal.

0 votes
0 votes

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

Answer:

Related questions