javascript, 2020: я никогда не работал с sharedArrayBuffer (или битами), и у меня есть несколько вопросов. По сути, я хочу хранить набор значений bools и небольшой счетчик (4-битный) в одном элементе Int16Array. но когда я манипулирую слотом памяти - похоже, он меняется на 32-битный. где функции 'setBit':
function setBitToOne(what, bitPos)
{
return what | (1 << bitPos);
}
function setBitToZero(what, bitPos)
{
const mask = ~(1 << bitPos);
return what & mask;
}
, но это приводит к:
десятичное число: -32768
в двоичном виде: 11111111111111111000000000000000
, когда результат, который я ищу, является последним битом набора 16-битных чисел:
десятичное число: 32768
в двоичном виде: 1000000000000000
Я не привык работать с битом мудрые операторы, мне нужно замаскировать + 16 бит? Я попытался передать индекс функции и работать без переназначения значения новой переменной, но это все равно не сработало.
(index, bitPos) //same 11111111111111111000000000000000
{
console.log(mainGrid[index], "value is"); // value is 0
console.log(bitPos, "bit is"); // value is 15
mainGrid[index]|=(1<<bitPos);
}
и когда я утешаю маску, я применяю я, конечно, получаю:
десятичное число: 32768
двоичное: 1000000000000000,
именно то, что я хочу. то же самое с кодом ниже:
let num = 0;
let result = (num|=1<<15);
console.log(result, "result");
bLog(result); //binary log
, который, кажется, работает ... так что здесь происходит, почему это не работает с Int16Array?