Код JavaScript
var n = 8; // or some arbitrary integer literal
n >> 1;
всегда обозначают «целочисленное деление на 2 без остатка»? Меня беспокоит порядок байтов, если целочисленный литерал больше одного байта.
Предыстория моего вопроса следующая:
У меня есть целочисленная переменная в диапазоне от 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;
}
Этот код работает в моем браузере, но мне интересно, будет ли он работать везде. Основная идея состоит в том, чтобы заполнить массив, взяв младший бит и разделив его на 256. Но реальное деление "/" преобразует переменную в переменную с плавающей запятой. Поэтому я использую «>>8», но на самом деле это предполагает прямой порядок байтов.
x >> y
приводитx
к (подписанному) Int32. Он также сохраняет крайние левые биты (они не становятся0
, что произошло бы, если бы вы использовали>>>
). - person Paul S.   schedule 17.08.2013