char a='a',b='b'; Print("Before: a = ",a, " b = ",b); //--- shift to the left b=a<<1; Print("After: a = ",a, " b = ",b); // The result will be:// Before: a = 97 b = 98// After: a = 97 b = -62
I get that the output of variable b is going to be the binary value of a (which is 97 and therefore 01100001 in binary form) shifted to the left by 1.
Now this is where I get stuck, the output of -62 gives 11000001 in binary form, which is not the 011000010 I was expecting
Could someone explain the reasoning behind this, thank you in advance
A char is between 127 and -128. The first bit (on the left) is used to sign the value (0 is +, 1 is -).
97 shifted by 1 to the left is 11000010.
So -10000000 + 1000010 : -128 + 66 = -62
...the output of -62 gives 11000001 in binary form, which is not the 011000010 I was expecting...
What Alain forgot to mention is that you experience the cutoff of left bits which do not fit into the type char's limited range (-127...128). Your leftmost zero gets lost because a char holds only 8 bits. Whenever you shift to left/right everything that crosses the boundaries of your actual type get's lost. Imagine it as if there is not "enough place" in your type.