In: Computer Science
C++
Circular Shift - bits fall off at one end are put back to the other end. In left rotation, the bits that fall off at left end are put back at right end. In right rotation, the bits that fall off at right end are put back at left end. Let n stored using 8 bits:
Left rotation of n = 11100101 by 3 makes n =
00101111
Right rotation of n = 11100101 by 3 makes n = 10111100
Use functions below;
int leftrotate(int n, unsigned int d){
}
int rightrotate(int n, unsigned int d){
}
The program can be found below
// C++ code to rotate bits of number
#include<iostream>
using namespace std;
#define INT_BITS 32
class circularRotate
{
/*Function to left rotate n by d bits*/
public:
int leftRotate(int n, unsigned int d)
{
/* In n<<d, last d bits are 0. To
put first 3 bits of n at
last, do bitwise or of n<<d
with n >>(INT_BITS - d) */
return (n << d)|(n >> (INT_BITS - d));
}
/*Function to right rotate n by d bits*/
int rightRotate(int n, unsigned int d)
{
/* In n>>d, first d bits are 0.
To put last 3 bits of at
first, do bitwise or of n>>d
with n <<(INT_BITS - d) */
return (n >> d)|(n << (INT_BITS - d));
}
};
/* Main code*/
int main()
{
circularRotate g;
int n = 16;
int d = 2;
cout << "Left Rotation of " << n <<
" by " << d << " is ";
cout << g.leftRotate(n, d);
cout << "\nRight Rotation of " << n <<
" by " << d << " is ";
cout << g.rightRotate(n, d);
getchar();
}