593 views
4 votes
4 votes

What will be the output of the program ?

#include<stdio.h>

int main()
{
    int i=4, j=8;
    printf("%d, %d, %d\n", i|j&j|i, i|j&j|i, i^j);
    return 0;
}
  A.
12, 12, 12
  B.
112, 1, 12
  C.
32, 1, 12
  D.
-64, 1, 12

3 Answers

4 votes
4 votes

It is actually a compiler dependent question as it is not specified in which order the arguments of printf() will be evaluated..According to CDECL convention which most of the compilers use , arguments are evaluated right to left..

So i XOR j will be found first which is given by : 4 XOR 8  =  12

Then  i |  j & j | i , so here AND is performed first..We know x AND x = x only.

So  i | j | i   =  4 OR 8 OR 4   =   12

Similarly the last argument from right which is same as middle one is also calculated as 12..

Hence A) should be the correct option,,

Related questions

0 votes
0 votes
1 answer
1
Debargha Mitra Roy asked Apr 16
82 views
#include <stdio.h int main() { int a[3] = {1, 3, 5, 7, 9, 11}; int *ptr = a[0]; ptr += sizeof(int); printf("%d", *ptr); return 0; }(Assume size of int to be $2$ bytes.)T...
0 votes
0 votes
2 answers
3
Debargha Mitra Roy asked Apr 10
122 views
What is the output of the below code?#include <stdio.h void main() { static int var = 5; printf("%d ", var ); if (var) main(); }a. 1 2 3 4 5b. 1c. 5 4 3 2 1d. Error
1 votes
1 votes
1 answer
4
SSR17 asked Feb 29
256 views
#include <stdio.h int main() { int i = -1; int x = (unsigned char)i; printf("%d", x); return 0; }output is 255 , but please explain how