Binary "Shift Left" operator?

Mark Smith mark at maseurope.net
Wed Apr 30 10:58:09 EDT 2008


As Mark and Colin said, shift left is just multiplying by 2 however  
many times, but assuming the numbers are 32 bit positive integers,  
you have to get rid of anything above 2^32, so I think this does it:

function shiftLeft pNum, pSteps
    if pNum = 0 then return 0
    if pSteps is empty then put 1 into pSteps
    put pNum * (2 ^ pSteps) into tShiftedNum
    if tShiftedNum > 2 ^ 32  then subtract 2 ^ 32 from tShiftedNum
    return tShiftedNum
end shiftLeft

Best,

Mark


On 29 Apr 2008, at 18:34, David Bovill wrote:
> 2008/4/29 Colin Holgate <coiin at rcn.com>:
>
>> At 5:23 PM +0100 4/29/08, David Bovill wrote:
>>
>>> Is there an equivalent in Rev - if not can anyone translate this  
>>> to some
>>> basic math functions?
>>>
>>
>> Shift left is the same as * 2. 31 << 3 would be the same as * 8.
>>
>> What was it that you needed to achieve?
>>
>
> I'm making a start on the Map library as part of a suite of open  
> source API
> libraries. This JavaScript function is for a Mercator Projection  
> used in
> Google maps amongst others. The script looks like this:
>
> function Adjust(x,y,deltaX,deltaY,z)
>> {
>> 	var offset=268435456;
>> 	var radius=offset/Math.PI;
>>
>> 	function LToX(x)
>> 	{
>> 		return Math.round(offset+radius*x*Math.PI/180);
>> 	}
>>
>> 	function LToY(y)
>> 	{
>> 		return Math.round(offset-radius*Math.log((1+Math.sin(y*Math.PI/ 
>> 180))/(1-Math.sin(y*Math.PI/180)))/2);
>> 	}
>>
>> 	function XToL(x)
>> 	{
>> 		return ((Math.round(x)-offset)/radius)*180/Math.PI;
>> 	}
>>
>> 	function YToL(y)
>> 	{
>> 		return (Math.PI/2-2*Math.atan(Math.exp((Math.round(y)-offset)/ 
>> radius)))*180/Math.PI;
>> 	}
>>
>> 	return {x:XToL(LToX(x)+(deltaX<<(21-z))),y:YToL(LToY(y)+(deltaY<< 
>> (21-z)))};
>> }
>>
>>
> And its the last line that looks tricky. The
>
>> deltaX<<(21-z)
>>
>> is the bit I guess i am looking most to figure out?
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your  
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution




More information about the use-livecode mailing list