Он существует в виде массива как Uint32Array ( подписанная версия - Int32Array), но я было сказано, что когда вы получаете доступ к этому значению, оно становится обычным номером JS.

let number = (new Unit32Array(1)).fill(1)[0];

Если число переменной реализовано в виде двойного числа, и после выполнения побитовой операции оно преобразуется в 32-разрядное целое число со знаком.

Я не понимаю цели Uint32Array, если вы действительно можете использовать беззнаковое представление в массиве, т. Е. Когда вы обращаетесь к нему, оно появляется с нормальным номером?

function analyze () {
  // let test = 2147483647; // max 32 bit integer
  // let test = -2147483647; // min 32 bit integer
  for(let place = 0; place < 32; place++){
    let power2 = Math.pow(2, place);
    let bit = test & power2;
    console.log(place, bit)
  }
}
analyze();

/*
2^0 is 1 is 0x1
2^1 is 2
2^2 is 4
2^3 is 8
.
.

2^31 is 2147483648
2^32 is 4294967296
*/
3
j.a. 20 Фев 2020 в 19:55

2 ответа

Лучший ответ

Большинство людей не знают, что JavaScript хорошо работает с побитовыми операциями. Однако вам необходимо связать его с буфером массива.

let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers
1
bob 27 Фев 2020 в 17:03

Используйте тройное смещение вправо, чтобы использовать число как без знака. Это существенно предотвращает расширение знака (и работает с Uint32Array).

 > var myNumber = -5;
-5
> myNumber >>> 0
4294967291
0
Michael Bianconi 20 Фев 2020 в 16:57