Home » C programming language

Bitwise Operators - Find output programs in C with explanation (Set 2)



If you are here first time, I would recommend to read Bitwise Operators - Find output programs (set -1) first.

This is a second set of find output programs on C language Bitwise Operators; each question has correct output and explanation about the answer.

Predict the output of following programs.

Program - 1

#include <stdio.h>
int main()
{
	unsigned char a=0xFA;
	
	a= (a>>4) | (a<<4);
	
	printf("a = %02X\n",a);
				
	return 0;
}

Output

a= AF

Explanation

The expression a= (a>>4) | (a<<4); will swap the nibbles, here a>>4 will shift the last 4 bits (from 7 to 4) to the first 4 position (3 to 0) and statement a<<4 will shift the first 4 bits from (0 to 3), to the last 4 position (from 4 to 7). And the Bitwise OR ('|') operator will add both of the nibbles, thus the output will be AF (swapped nibbles).


Program - 2

#include <stdio.h>
int main()
{
	unsigned char a=0xFA;
	char loop;
	
	for(loop=7; loop>=0; loop--)
		printf("%d ",(a & (1<<loop))?1:0);
	
	printf("\n");
	
	return 0;
}

Output

1 1 1 1 1 0 1 0

Explanation

This program is to get BINARY value of any 8 bits integer number, expression (a & (1<<loop))?1:0 will check whether particular bit is set (high) or not, if it is set (high), '1' will print else '0' will print.


Program - 3

#include <stdio.h>
int main()
{
	unsigned char a=0xAA;
	unsigned char b=0x55;
	
	printf("(a^b): %02X\n",(a^b));
		
	return 0;
}

Output

FF

Explanation

Bitwise XOR (^) returns 1, if one operand's bit is 1 and other operand's bit is 0, consider the given truth table:

a	b	a^b
0	0	0
0	1	1
1	0	1
1	1	0

Expression (a^b)
a:	0xAA		1010 1010
b:	0x55		0101 0101
(a^b)	0xFF		1111 1111

Thus, the output will be "FF".


Program - 4

#include <stdio.h>
int main()
{
	unsigned char a=0xAA;
	
	a= (a^0x55);
	a= (a^0x55);
	
	printf("a= %02X\n",a);
	return 0;
}

Output

a= AA

Explanation

When, some value is XORed with a number twice, same (initial value) returns.
Consider the expression evaluation, first (a= a^0x55)
a: 0xAA - 1010 1010
0x55 - 0101 0101
(a^0x55) - 1111 1111 = 0xFF

Now, second expression (a= a^0x55)
a: 0xFF - 1111 1111
0x55 - 0101 0101
(a^0x55) - 1010 1010 = 0x55
Thus, the output will be "AA".







Was this page helpful? Please share with your friends...

Are you a blogger? Join our Blogging forum.



Comments and Discussions





© https://www.includehelp.com (2015-2018), Some rights reserved.




close Like other websites, this site uses cookies to deliver relevant ads based on your interest, by using our website, you acknowledge that you have read our privacy policy.