Извършва кода на JavaScript
var n = 8; // or some arbitrary integer literal
n >> 1;
винаги означава "цяло число деление на 2 без остатък"? Притеснението ми е endiance, ако целочисленият литерал е по-голям от един байт.
Предисторията на въпроса ми е следната:
Имам целочислена променлива в диапазона от 0 до 2^32-1, която би се поместила в uint32, ако имах въведен език за програмиране, различен от JS. Трябва да преобразувам това в Uint4Array с четири елемента в малък ред.
Текущият ми JavaScript подход е:
function uInt32ToLEByteArray( n ) {
var byteArray = new Uint8Array(4);
for( var i = 0; i < 4; i++ ) {
byteArray[i] = n & 255;
n >> 8;
}
return byteArray;
}
Този код работи в моя браузър, но се чудя дали ще работи навсякъде. Основната идея е попълването на масива чрез вземане на LSB и разделяне на 256. Но реално деление "/" би превърнало променливата в променлива с плаваща запетая. Така че използвам ">>8", но това всъщност предполага голямо разпределение.
x >> y
прехвърляx
към (подписан) Int32. Той също така запазва най-левите битове (те не стават0
, което би се случило, ако използвате>>>
). - person Paul S.   schedule 17.08.2013