Exercise: Bitwise Operators

Questions for: Bitwise Operators

What will be the output of the program?
#include<stdio.h>

int main()
{
    printf("%d >> %d %d >> %d\n", 4 >> 1, 8 >> 1);
    return 0;
}
A:
4 1 8 1
B:
4 >> 1 8 >> 1
C:
2 >> 4 Garbage value >> Garbage value
D:
2 4
Answer: C
No answer description is available. Let's discuss.
What will be the output of the program?
#include<stdio.h>

int main()
{
    unsigned char i = 0x80;
    printf("%d\n", i<<1);
    return 0;
}
A:
0
B:
256
C:
100
D:
80
Answer: B
No answer description is available. Let's discuss.
If an unsigned int is 2 bytes wide then, What will be the output of the program ?
#include<stdio.h>

int main()
{
    unsigned int a=0xffff;
    ~a;
    printf("%x\n", a);
    return 0;
}
A:
ffff
B:
0000
C:
00ff
D:
ddfd
Answer: A
No answer description is available. Let's discuss.
Assuming a integer 2-bytes, What will be the output of the program?
#include<stdio.h>

int main()
{
    printf("%x\n", -1<<3);
    return 0;
}
A:
ffff
B:
fff8
C:
D:
-1
Answer: B

The system will treat negative numbers in 2's complement method.

Example:

Assume the size of int is 2-bytes(16 bits). The integer value 1 is represented as given below:

Binary of 1: 00000000 00000001 (this is for positive value of 1)

1's complement of binary 1: 11111111 11111110
2's complement of binary 1: 11111111 11111111

Thy system will store '11111111 11111111' in memory to represent '-1'.

If we do left shift (3 bits) on 11111111 11111111 it will become as given below:

11111111 11111111 ---(left shift 3 times)---> 11111111 11111000.

So, 11111111 11111000 ---(binary to hex)---> FF F8. (Required Answer)

Note:

How is the negative number obtained from 2's complement value?

As stated above, -1 is represented as '11111111 11111111' in memory.

So, the system will take 2's complement of '11111111 11111111' to the get the original negative value back.

Example:

Bit Representation of -1: 11111111 11111111

Since the left most bit is 1, it is a negative number. Then the value is

1's complement: 00000000 00000000
2's complement: 00000000 00000001 (Add 1 to the above result)

Therefore, '00000000 00000001' = 1 and the sign is negative.

Hence the value is -1.

If an unsigned int is 2 bytes wide then, What will be the output of the program ?
#include<stdio.h>

int main()
{
    unsigned int m = 32;
    printf("%x\n", ~m);
    return 0;
}
A:
ffff
B:
0000
C:
ffdf
D:
ddfd
Answer: C
No answer description is available. Let's discuss.
Ad Slot (Above Pagination)
Quiz