Examveda

What will be the output of the following C code?
#include <stdio.h>
int main()
{
    int x = 0, y = 2;
    int z = ~x & y;
    printf("%d\n", z);
}

A. -1

B. 2

C. 0

D. Compile time error

Answer: Option B

Solution (By Examveda Team)

Understanding Bitwise Operators:
This question tests your understanding of bitwise operators in C. Let's break down the code step by step.

1. `~x`: The tilde (~) is the bitwise NOT operator. It flips all the bits of the variable `x`. Since `x` is 0 (which is represented as all 0s in binary), `~x` will become -1 (represented as all 1s in two's complement).

2. `&y`: The ampersand (&) is the bitwise AND operator. It compares the corresponding bits of two operands. If both bits are 1, the resulting bit is 1; otherwise, it's 0.

3. `~x & y`: We're performing a bitwise AND between `~x` (-1, all 1s) and `y` (2). Let's assume your system uses 32-bit integers (most do). Then 2 is represented as `00000000000000000000000000000010` in binary. The bitwise AND operation will be:
11111111111111111111111111111111 (&) 00000000000000000000000000000010 = 00000000000000000000000000000010
This results in 2.

4. `printf("%d\n", z);` This line prints the value of `z`, which is 2, to the console.

Therefore, the correct answer is B: 2
Important Note: The exact binary representation and the behavior of bitwise NOT might depend slightly on your specific compiler and system architecture, but the principle remains the same.

This Question Belongs to C Program >> C Fundamentals

Join The Discussion

Comments (1)

  1. Hareshwar Avhad
    Hareshwar Avhad:
    11 months ago

    1. Bitwise NOT (~) on x = 0: This flips all bits to give ~x = -1.
    2. Bitwise AND (&) between ~x (-1) and y (2): Only the bits common to both are retained, resulting in 2.
    3. So, the output is 2.

Related Questions on C Fundamentals