[fpc-devel] Unexpected behaviour of bit operators

gabor gabor at poczta.onet.pl
Fri May 17 16:45:52 CEST 2019

Can you provide c source code?
I'm not sure about this:
...(a SHL 5+b SHR 2)...
Maybe it should look like this:
((a SHL 5+b) SHR 2)

Regards, Michał.

W dniu 2019-05-17 o 10:47, Marco Borsari via fpc-devel pisze:
> In the code below
> program test;
> const n=12;
> s=1 shl n;
> var a,b,c,h1,h2:word;
> 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

More information about the fpc-devel mailing list