It should be char a = ‘P’ instead of char a = ‘p’

Dark Mode

3,776 views

12 votes

What is printed by the following $\text{ANSI C}$ program?

#include<stdio.h> int main(int argc, char *argv[]) { char a = ‘P’; char b = ‘x’; char c = (a&b) + ‘*’; char d = (a|b) – ‘-’; char e = (a^b) + ‘+’; printf(“%c %c %c\n”, c, d, e); return 0; }

$\text{ASCII}$ encoding for relevant characters is given below

$\begin {array}{|c|c|c|c|c|} \hline \text{A} & \text{B} & \text{C} & \dots & \text{Z} \\\hline 65 & 66 & 67 & \dots & 90 \\\hline \end{array} \qquad \begin {array}{|c|c|c|c|c|} \hline \text{a} & \text{b} & \text{c} & \dots & \text{z} \\\hline 97 & 98 & 99 & \dots & 122 \\\hline \end{array} \\ \qquad \qquad \qquad \quad \begin {array}{|c|c|c|} \hline * & + & – \\\hline 42 & 43 & 45 \\\hline \end{array} $

- $\text{z K S}$
- $122 \; 75 \; 83$
- $ * \; – \; + $
- $\text{P x +}$

1

Here, ^ denotes XOR operation. XOR gives $1$ when there are odd number of 1s in the input bits

For e.g.

a=$0$ $0$ $1$ $0$ $1$

b=$1$ $0$ $1$ $0$ $0$

$1$ $0$ $0$ $0$ $1$ = $a\bigoplus b$

Actually, a shortcut for this question, if you have computed $c$ and found that $z$ is char that will be printed , only option $A$ matches. So, no need to evaluate $d$ and $e$ as this is an MCQ

0

10 votes

Best answer

Answer : Option A is the answer.

char a = ‘P’

char b = ‘x’

**As per precedence of operators, () evaluated prior to +/-**

Note that &,^ and | are bit wise operators and Addition/Subtraction of characters applied on their ASCII values.

a = ‘P’ ===> a = Ascii value of (‘P’) = 65+15 = 80 ==> a = (0101 0000)$_2$

b = ‘x’ ===> b = Ascii value of (‘x’) = 97+23 = 120 ==> b = (0111 1000)$_2$

a & b = (0101 0000)$_2$ [ apply & logic on corresponding bits ] = (80)$_{10}$

‘*’ = 42 = (0010 1010)$_2$

a&b + ‘*’ = (0111 1010)$_2$ = 64+32+16+8+2 = 122 [ add corresponding bits ], [ simply 80+42 = 122 ]

print character ( 122 ) = small ‘z’

a | b = (0111 1000)$_2$ [ apply | logic on corresponding bits ] = (120)$_{10}$

‘-’ = 45

a|b - ‘-’ = 120-45 = 75 = 65 + 10

print character ( 75 ) = Capital ‘K’

a ^ b = (0010 1000)$_2$ [ apply ^ logic on corresponding bits ] = (40)$_{10}$

‘+’ = 43

a^b + ‘+’ = 40+43 = 83 = 65 + 18

print character ( 83 ) = Capital ‘S’

@Nisha Bharti It should’ve been:-

printf(“%d %d %d\n”, c, d, e); //printing integers rather than char

3