[fpc-devel] Unexpected behaviour of bit operators

Marco Borsari borsa77 at libero.it
Mon May 20 11:24:16 CEST 2019


On Fri, 17 May 2019 18:06:13 +0200
Ondrej Pokorny <lazarus at kluug.net> wrote:

> On 17.05.2019 10:47, Marco Borsari via fpc-devel wrote:
> > Does this is an effect of some multiplication overflow, or is it a bug?
> 
> Both the bit operations and the arithmetic opretaions return integers as 
> results and not words:
> https://www.freepascal.org/docs-html/ref/refsu46.html
> https://www.freepascal.org/docs-html/ref/refsu45.html#x148-17000012.8.1
> 
> The c:=... overflows - you get a range check error:
> 
> c:=(a XOR b)*(a SHL 5+b SHR 2); // range check error
> 
> Just add a couple of word() casts where you need the integer-result to 
> be casted to word:

I tested it (the hash is used for a contest selector in a data
compressor), but it seems that the results are bit identical with or
without the cast. Do you point it out to suppress false positives in a
debug phase? Anyway, thank you.
-- 
Simplex sigillum veri



More information about the fpc-devel mailing list