[fpc-pascal] Conversion from C to Pascal - Left bit shift
    LacaK 
    lacak at zoznam.sk
       
    Fri Sep  3 10:09:05 CEST 2021
    
    
  
> 
>     Can we say that in Pascal the result of:
>         E1 shl E2
>     is of same type as E1 ?
>     (so if E1 is LongWord then result is LongWord also?)
> 
>     What if there is an expression on left side:
>         (E1*x) shl E2
>     Will E1*x promote to 64 bits (on 64 bit target)?
> 
> 
> See documentation on automatic type conversion (the remarks section 
> below table 3.3): 
> https://www.freepascal.org/docs-html/ref/refsu4.html#x26-26004r3 
> <https://www.freepascal.org/docs-html/ref/refsu4.html#x26-26004r3>
> While this doesn't explicitly mention shift behaviour, it implies that 
> E1 and (E1*x) will be promoted to native sized integer if smaller.  For 
> the first example, if E1 is a longword on a 32 bit machine, the result 
> should also be a longword.
> 
But look at Delphi documentation: 
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Expressions_(Delphi)#Logical_.28Bitwise.29_Operators
"The operations x shl y and x shr y shift the value of x to the left or 
right by y bits, which (if x is an unsigned integer) is equivalent to 
multiplying or dividing x by 2^y; the result is of the same type as x"
My understanding is, that in case:
   E1 shl E2 result is of E1 type (so if E1 is LongWord on 64 bit 
platform result is still LongWord?)
Case
   (E1*x) shl E2 is subject to native integer promotion I guess?
L.
    
    
More information about the fpc-pascal
mailing list