[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