Expressions - Programming

Q1:

Assuming, integer is 2 byte, What will be the output of the program?
#include<stdio.h>

int main()
{
    printf('%x\n', -2<<2);
    return 0;
}

A ffff

B 0

C fff8

D Error

ANS:A - ffff

The integer value 2 is represented as 00000000 00000010 in binary system.

Negative numbers are represented in 2's complement method.

1's complement of 00000000 00000010 is 11111111 11111101 (Change all 0s to 1 and 1s to 0).

2's complement of 00000000 00000010 is 11111111 11111110 (Add 1 to 1's complement to obtain the 2's complement value).

Therefore, in binary we represent -2 as: 11111111 11111110.

After left shifting it by 2 bits we obtain: 11111111 11111000, and it is equal to "fff8" in hexadecimal system.