вторая функция не работает из-за того что тип данных у нас НЕ трехбайтовый - а значит смещение влево не удалит самые большие разряды числа, которые по задумке должны были бы стереться при выходе за рамки размеров типа...
(color << 8) >> 16; // это фигня
хотя мысль была верная :)

Код:
function decolorRGB(color) {
var colorArray = new Array();
var rem = color;
colorArray[0] = rem >> 16;
rem -= colorArray[0] << 16;
colorArray[1] = rem >> 8;
rem -= colorArray[1] << 8;
colorArray[2] = rem;
return colorArray;
}
trace(decolorRGB(0xFFFFFF));
если надо в хексовом виде вывести обязательно - пиши функцию перевода из десятичной системы в хексы :) флэш все числа выдает только в десятичной, к сожалению..