Я новичок в концепции побитовых операций, и сегодня возился с некоторыми примерами. Все казалось ясным до тех пор, пока я не попытался создать функцию для выполнения кругового сдвига битов на uint
:
private function rotateLeft(value : uint, shift : int) : uint {
if ((shift &= 31) == 0)
return value;
return (value << shift) | (value >> (32 - shift));
}
Есть идеи, почему это не работает? Это кажется простым, но я думаю, что упускаю что-то очевидное.
РЕДАКТИРОВАТЬ:
Я тупо пытался сместить значение цвета (например, 0xFF0000) и ожидал чего-то по линии 0x0000FF, когда на самом деле я получал 0xFF000000 (что правильно, из-за длины uint
) - старшие байты предназначены для альфа-значения.