Talking about Bit Operators we are left with two of them, which we’ll be discussing in this article.
One’s Complement Operator (~)
It takes and works only on one operand. On taking one’s complement of any variable, the 0s are changed to 1 and vice-versa from the bit structure (binary representation) of that variable. The following example will make it easier to understand:
Suppose we have a short int a
short int a = 16;
its binary representation will be
0000000000010000 (decimal 16)
on taking one’s complement like below
res = ~a;
res will contain
1111111111101111 (decimal 65519)
It can be used as a part of algorithm to encrypt data.
XOR (eXclusive OR) (^)
It is derived from the OR Operator and takes two operands to work on. It compares bits like the OR bitwise operator but exclusively for OR cases.
Following will clarify what it does:
short int a = 46265, its binary form
1011010010111001
another short int b = 46734, binary
1011011010001110
performing XOR operation
a -> 1011010010111001
b -> 1011011010001110
XOR'ed-> 0000001000110111
As you can see, it compares two bits (from variable a and b) and if both are same it gives 0 or 1 in any other case. Thus we can say it does an eXclusive OR comparison between the bit structure of two variables.
now let's look at an example code showing how these two operators are used:
// Example Program to demonstrate how
// One's Complement (~) and XOR (^)
// Opeartors are used.
#include<stdio.h>
// prototype
void showbits(short int);
// defined
void showbits(short int dec_num)
{
short int loop, bit, and_mask;
for(loop=15; loop>=0; loop--)
{
and_mask=1<<loop;
bit=dec_num&and_mask;
if(bit==0) printf("0");
else printf("1");
}
}
void main()
{
// declare three short ints
// for storing user inputs
// and results
short int a,b,res;
int ch;
while(ch!=3)
{
// show main menu
printf("\t\tMain Menu\n");
printf("\t\t---------\n");
printf("1. Perform One's Complement Operation\n");
printf("2. Perform XOR Operation\n");
printf("3. Quit\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
// take input
printf("\n\nEnter a decimal number: ");
scanf("%d",&a);
printf("\n\n\tEntered Number: ");
showbits(a);
printf(" (decimal %d)",a);
// perform one's complement
// operation
res=~a;
// show the formatted output
printf("\n\t~'ed : ");
showbits(res);
printf(" (decimal %d)\n\n",res);
break;
case 2:
printf("\n\nEnter two decimal number: ");
scanf("%d",&a);
scanf("%d",&b);
printf("\n\n\tEntered Number 1: ");
showbits(a);
printf(" (decimal %d)",a);
printf("\n\tEntered Number 2: ");
showbits(b);
printf(" (decimal %d)",b);
// perform XOR on two
// variables a and b
res=a^b;
printf("\n\tXOR'ed : ");
showbits(res);
printf(" (decimal %d)\n\n",res);
break;
}
}
}
Test Run:
Main Menu --------- 1. Perform One's Complement Operation 2. Perform XOR Operation 3. Quit 1
Enter a decimal number: 37
Entered Number: 0000000000100101 (decimal 37) ~'ed : 1111111111011010 (decimal -38)
Main Menu --------- 1. Perform One's Complement Operation 2. Perform XOR Operation 3. Quit 2
Enter two decimal number: 987 10
Entered Number 1: 0000001111011011 (decimal 987) Entered Number 2: 0000000000001010 (decimal 10) XOR'ed : 0000001111011001 (decimal 985)
Main Menu --------- 1. Perform One's Complement Operation 2. Perform XOR Operation 3. Quit 3 Press any key to continue...
Related Articles: