На самом деле разницы почти нет, вот один из тестов ( хром ):

Код:
Player:
Player type: PlugIn / release /
version: WIN 13,0,0,214
Test: su.fishr.tasks::BitwiseVsDivision
length array: 100 000 000
// x % 2
method: modulo, duration : 2 353 ms
// x * .5
method: multiplyByHalf, duration : 1 104 ms
// x / 2
method: divideIntoTwo, duration : 1 101 ms
// x >> 1
method: bitwiseRigthShift, duration : 1 113 ms
...end test
тестовый класс

Код AS3:
///********************************************************************
///* Copyright © 2014 fishr (fishr.flash@gmail.com)
///********************************************************************
package su.fishr.tasks
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.globalization.NumberFormatter;
import flash.utils.getTimer;
import su.fishr.utils.ITask;
/**
* ...
* @playerversion Flash 10.1
* @langversion 3.0
* @author fishr
* @created 5/27/2014
* @since 5/27/2014
*/
public class BitwiseVsDivision extends EventDispatcher implements ITask
{
/**-------------------------------------------------------------------------------
*
* V A R I A B L E ' S
*
* --------------------------------------------------------------------------------
*/
//{
static private const AUTHOR:String = "fishr (fishr.flash@gmail.com)";
static public const TEST_COMPLETE:String = "testComplete";
private var _valueData:Number = 100000000;
private var _taskName:String;
private var _result:String;
private var _numFormater:NumberFormatter;
//}
/**-------------------------------------------------------------------------------
*
* P R O P E R T I E S
*
* --------------------------------------------------------------------------------
*/
//{
/* INTERFACE su.fishr.utils.ITask */
public function get result():String
{
return _result;
}
public function get taskName():String
{
return _taskName;
}
public function get valueData():Number
{
return _valueData;
}
public function set numberFormater(value:NumberFormatter):void
{
_numFormater = value;
}
//}
/**-------------------------------------------------------------------------------
*
* P U B L I C
*
* --------------------------------------------------------------------------------
*/
//{
public function start(valData:Number = 0):void
{
if ( valData ) _valueData = valData;
var arr:Array = new Array();
while( arr.length < _valueData )
{
arr.push( arr.length + 2);
}
const methods:Array/*String*/ = [ "bitwiseRigthShift",
"divideIntoTwo",
"multiplyByHalf",
"modulo" ];
var length:int = arr.length;
const lenghtStr:String = _numFormater.formatInt( length);
_result = "length array: " + lenghtStr + "\r\r";
var startTime:int;
var finishTime:int;
var i:uint = methods.length;
while ( i-- )
{
startTime = getTimer();
this[ methods[ i ] ]( arr );
finishTime = getTimer();
const time:String =
_result += "method: " + methods[ i ] + ", duration : " + ( _numFormater.formatInt( ( finishTime - startTime ) ) ) + " ms \r";
}
_result += "\r...end test";
this.dispatchEvent( new Event( TEST_COMPLETE ) );
}
//}
/**-------------------------------------------------------------------------------
*
* P R I V A T E
*
* --------------------------------------------------------------------------------
*/
//{
private function bitwiseRigthShift( arr:Array/*int*/ ):void
{
var h:uint = arr.length;
while ( h-- )
{
const res:int = arr[ h ] >> 1;
}
}
private function divideIntoTwo( arr:Array/*int*/ ):void
{
var h:uint = arr.length;
while ( h-- )
{
const res:int = arr[ h ] / 2;
}
}
private function multiplyByHalf( arr:Array/*int*/ ):void
{
var h:uint = arr.length;
while ( h-- )
{
const res:int = arr[ h ] *.5;
}
}
private function modulo( arr:Array/*int*/ ):void
{
var h:uint = arr.length;
while ( h-- )
{
const res:int = arr[ h ] % 2;
}
}
//}
}
}