[UPD] bitwise "shift"s
Alex Tweedly
alex at tweedly.net
Fri Nov 25 14:48:31 EST 2005
Sean Shao wrote:
> Sorry for the post earlier, but it seems that there's a small error in
> it.. Here are the 3 fixed bitwise shift operators (shiftLeft (<<),
> shiftRight (>>) and shiftRightZero (>>>)).. Basically there are some
> integer combinations that would make the other formulas fail and
> sometimes the shiftRightZero would return a negative integer (which is
> impossible).. So here are the three corrected functions:
>
Thanks again for these functions, and for all the time it must have
taken to figure out what you can do and what you can't.
Alejandro got me interested in the md4digest function, so I tried it
using your functions, and I'm afraid there is still one problem.
One example that fails is
put 6448964192 into tVar
put bitwiseShiftRightZero(tVar, 29) into tResult
put format("%08x %08x", tVar, tResult) into msg
This results in
80636260 0000000C
when it should give
80636260 00000004
The problem is that 6448964192 is a positive number which has the "sign"
bit set - i.e. it's larger than a single 32-bit positive integer can
hold, but Rev 2.6.1 uses (I guess??) 64-bit ints if needed (??)
I added the following (very inelegant) code to the start of each of your
functions, and all appears to be now OK.
> repeat while p1 > 2^31
> put p1 - 2^32 into p1
> end repeat
My attempt at the md4digest function now passes all the short test cases
from the reference implementation, but still fails on the long ones
..... sigh :-(
--
Alex Tweedly http://www.tweedly.net
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.362 / Virus Database: 267.13.7/182 - Release Date: 24/11/2005
More information about the use-livecode
mailing list