Это просто преобразование числа в двоичное.
let arr = new Uint32Array(1).fill(1);
for (let i = 0; i < 32; i++) {
console.log(i, (arr[0] >>> i) & 1);
}
Фактически, тот факт, что число взято из Uint32Array
, не имеет значения, но, возможно, это потому, что вы упростили свой вопрос.
Также обратите внимание, что бит "единицы", который вы хотите, чтобы в вашем вопросе было напечатано как 31, на самом деле является первым битом, потому что биты отсчитываются, начиная с нуля справа (младший значащий бит). Если вы действительно хотели считать это нестандартным способом, как в вопросе, то:
let arr = new Uint32Array(1).fill(1);
for (let i = 0; i < 32; i++) {
console.log(i, (arr[0] >>> (31 - i)) & 1);
}
Редактировать : для правильных значений, даже если установлен MSB («знаковый бит»), смещение битов без знака ( >>>
) должен быть использован.