Right Shift Negative Numbers in C++

We are going to learn how to right shift negative numbers in C++. Right shift is denoted by the operator “`>>`“.

Right shifting takes two operands (two numbers) and right shifts the bits of the first operand by the amount of the value of the second operand.

Syntax

`x>>y`
This will shift the variable x by y amount to the right. We take these variables as binary numbers, i.e, the representation of a number in 0s and 1s.

Example
Let us take a number as -25 and we are interested in right shifting this value. -25 in binary is 11100111. Our common understanding would be to shift this binary value to the right and add a 0 as MSB(Most significant bit). But this is the wrong approach. The MSB bit must be fixed at all times. With this approach, 1 at MSB will be fixed for our example.
Thus the right shifted value of -25 will be 11110011 which is -13 when converted back to decimal.

Example Code

```#include<iostream>
using namespace std;
void print_bin(char num)
{
int i;
for(i=7; i>=0; i--)
{
if(num & 1<<i)
cout<<"1";
else
cout<<"0";
}
}

int main()
{
char num1 = -25;
char i;
for(i=0; i<8; i++)
{
print_bin(num1 >> i);
cout<<endl;
}
return 0;
}```
`Output:`
11100111
11110011
11111001
11111100
11111110
11111111
11111111
11111111

Explanation

• Whenever we get a right shift, we have to check whether the number is even or odd.
• If even, divide the number by 2.
• If odd, divide the number by 2 and add 1 to the result.
• A function print_bin() is defined to convert the decimal number into a binary and then check the MSB.
• The function checks and retains the MSB and shifts the other 7 bits.
• In the main() function, num1 is defined as a character to store the binary converted value.
• For loop is run 8 times to show each and every bit is shifted. Thus, we have 8 answers.
• Each time the value is right shifted once.