Help with Bitwise shift left MQL4 book example

To add comments, please log in or register
Mike Dean
13
Mike Dean  

   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 

Alain Verleyen
38661
Alain Verleyen  

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

alphatrading
102
alphatrading  
Mike Dean: 

...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.

To add comments, please log in or register