[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