Hash sign shift undefined behavior fix
Hash sign shift undefined behavior fix

Rebol's CRCs (used internally for hashing, and exposed via CHECKSUM
as a native when used without a /method) use signed values for the
calculation...both as a result and during the process itself.

Undefined behavior sanitizer noticed that it was left shifting 32-bit signed
numbers into the high bits.  This is technically not legal and the compiler
makes no guarantee of what will happen with that:

http://stackoverflow.com/q/3784996/211160

This corrects that issue by making sure it's a signed number during the time
of shifting.  It also touches up the casts and code to make what's going on
a bit more obvious.

All things being equal it might be desirable to use unsigned math.  The
precise details guiding the choice in the hash to do things like seed the
calculation with the sum of the length of the input and the signed form of the
first byte of the data isn't explained, and it does run either way... but the
numbers you would get out of CHECKSUM would be different, which might
break anything using Rebol's checksum method that had saved the values.

kealist/ren-c,codebybrett/ren-c,codebybrett/ren-c,giuliolunati/ren-c,rgchris/ren-c,kealist/ren-c,hostilefork/rebol,draegtun/ren-c,hostilefork/rebol,kealist/ren-c,rgchris/ren-c,hostilefork/rebol,rgchris/ren-c,draegtun/ren-c,rgchris/ren-c,hostilefork/rebol,hostilefork/rebol,kealist/ren-c,giuliolunati/ren-c,hostilefork/rebol,draegtun/ren-c,codebybrett/ren-c,codebybrett/ren-c,codebybrett/ren-c,draegtun/ren-c,codebybrett/ren-c,kealist/ren-c,draegtun/ren-c,giuliolunati/ren-c,kealist/ren-c,giuliolunati/ren-c,giuliolunati/ren-c,rgchris/ren-c,draegtun/ren-c