[fpc-devel] Unexpected behaviour of bit operators
J. Gareth Moreton
gareth at moreton-family.com
Fri May 17 15:44:04 CEST 2019
It's a constant set to equal 2^n, or in binary, 1 followed by n zeroes.
Gareth aka. Kit
P.S. And yes, that mask is also zero-extended to 32-bit or whatever the
word size is on the CPU.
On 17/05/2019 14:24, wkitty42 at windstream.net wrote:
> 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
>>
>
>
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
More information about the fpc-devel
mailing list