[fpc-devel] Unexpected behaviour of bit operators

wkitty42 at windstream.net wkitty42 at windstream.net
Fri May 17 15:24:02 CEST 2019

On 5/17/19 4:47 AM, Marco Borsari via fpc-devel wrote:
> In the code below
> program test;
> const n=12;
> s=1 shl n;
> var a,b,c,h1,h2:word;

ummm... what is 's'? you've used it before it has been defined...

> begin
> a:=77;
> b:=0;
> (*c:=(a XOR b)*(a SHL 5+b SHR 2);*)
> h1:=((a XOR b)*(a SHL 5+b SHR 2)) SHR (16-n);
> (*h1:=c SHR (16-n);*)
> h2:=((a XOR b)*(a SHL 5+b SHR 2)) AND ((s-1) SHL (16-n)) SHR (16-n);
> (*h2:=c AND ((s-1) SHL (16-n)) SHR (16-n);*)
> writeln(h1,',',h2);
> end.
> the results of h1 and h2 (they are hashes) are different, and only h2
> appears to be correct and inside the range.
> If we precompute the hash value with c, then both h1 and h2 are
> the same.
> Does this is an effect of some multiplication overflow,
> or is it a bug?
> Regards, Marco Borsari

  NOTE: No off-list assistance is given without prior approval.
        *Please keep mailing list traffic on the list unless*
        *a signed and pre-paid contract is in effect with us.*

More information about the fpc-devel mailing list