Muranx
@Muranx
кто понял this тот в цирке не смеётся

Как работает оператор ' ~ ' в JS в данном случае?

Здравствуйте !

Интересует работа оператора ~ в js, в интернете многие ограничиваются примером типа . . .

9 === 00000000000000000000000000001001 
~9 === 11111111111111111111111111110110

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

let digit = 9;

function addNullToStart(dig){ // берем число (аргумент) преобразовываем в двоичную, затем добавляем нули вачале (если конечно нужны)
    let conDig = (dig).toString(2),
        conDigLen = conDig.length,
	    howMuchTo32 = 32 - conDigLen,
        zeroStr = '',
        res = '';

    if( conDigLen < 32 ){
        for(let k=0; k<howMuchTo32; k++){
            zeroStr += '0';
        };
        res = zeroStr + conDig;
    }
    return res;
};

function reverseBites(dig){ (в числе переданном аргументом меняем 1 на 0 и 0 соответственно на 1, вроде так работает ~ )
    let res = '';
    for(let k=0; k<dig.length; k++){
        if( !Number(dig[k]) ){
            res += '1'
        }else{
            res += '0';
        };
    };
    return res;
};

let convertedTo32Bits = addNullToStart( digit );
let reversedBites32Bits =  reverseBites( convertedTo32Bits );

console.log( 
         convertedTo32Bits ,  // 00000000000000000000000000001001  это 9 ( т.е наше число )
         reversedBites32Bits  // 11111111111111111111111111110110 это 4294967286 ( т.е. инверсия двоичного представления девятки )
     );


Помогите разобраться, где я сошёл с правильного пути, чтобы мне не запоминать тупо , что 9 это будет с тильдой -10 ( -(n+1) ) и бла бла бла, я же всё сделал вроде как по теории, инвертировал, НО вот как получается именно отрицательное число, никто почему-то не объясняет, хотя у всех вот это гигантское инвертированное число почему-то получается отрицательным, заранее спасибо за ответ!
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Чтобы четко понимать картинку, освежите в памяти, что такое дополнительный код
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы