>  기사  >  웹 프론트엔드  >  JS 연산자 '!~'에 대한 자세한 설명

JS 연산자 '!~'에 대한 자세한 설명

怪我咯
怪我咯원래의
2017-07-04 15:22:003147검색

이 글에서는 javascriptoperator"!~"를 위주로 자세하게 소개하고 있습니다. 몇년을 일하다보니 기본조차 잃어버리기 쉬운 부분인데, 웃음이 나네요. .

설 연휴가 다가오고 드디어 시간이 났습니다. 매일 다양한 기술 기사를 찾아보고 있는데 이 상태가 훌륭합니다.

오후에 js에 관한 기사를 읽었는데, 다음 문단이 내 관심을 끌었습니다.

코드는 다음과 같습니다.

(function () {
    var names = [];
    return function (name) {
        addName(name);
    }
    function addName(name) {
        if (!~names.indexOf(name))//如果存在则不添加
            names.push(name);
        console.log(names);// ["linkFly"]
    }
}())('linkFly');

if (!~names.indexOf(name)) "!~" 연산자는 무엇을 의미하나요? 이해가 되지 않는다면 ~로 시작하세요.

테스트 결과 결과 값에 다음 패턴이 있음을 알 수 있습니다. - (X+1)

검색 후 일부 기사에서는 이진수 부정

문자 그대로 8자리 이진수로 표현되는 한 문장만 누락되었습니다. 3=00000011, ~3=11111100, 위 공식을 적용하는 것은 잘못된 것입니다.
위의 설명은 아직 너무 추상적이고 구체적이지 않습니다. 실제로 여기에는 원본 코드, 역코드, 보완 코드에 대한 지식이 포함됩니다.

원본 코드
원본 코드 표현의 가장 높은 비트는 부호 비트입니다. 이 비트는 양수의 경우 0이고 음수의 경우 1입니다. 나머지 비트는 숫자의 절대값을 나타냅니다.
1의 보수 코드
부호 있는 숫자의 경우 양수의 1의 보수는 원래 코드와 동일합니다. 음수의 1의 보수는 부호 비트를 제외한 원래 코드의 모든 비트를 비트 단위로 반전한 것입니다. 보완코드는 보완코드를 찾는 과정에서 중간형태로 사용되는 경우가 많습니다.
보완 코드
양수의 보수 코드는 원래 코드와 동일하며 음수의 보수 코드는 원래 코드의 부호 비트를 제외한 모든 비트를 반전하고 마지막 비트에 1을 더하여 얻습니다. , 이는 코드에 1을 더한 숫자의 보수입니다. 컴퓨터의 숫자는 일반적으로 2의 보수 형태로 표현됩니다. 보완 코드에서는 (-0)D 대신 (-128)D가 사용됩니다. 참고: (-128)D에는 해당 원본 코드가 없으며 보완 코드는 (-128)D = (1000,0000)B입니다.
보수 연산
보수 연산은 부호 비트를 고려하지 않고 원래 코드의 각 비트를 반전하고 마지막 비트에 1을 더하여 얻습니다. 숫자의 보수는 그 반대의 보수입니다.

저자의 기사를 예로 들어

~는 비트 부정을 의미한다는 점을 이해하세요. 부정은 00111이면 11000(비트 부정)이 된다는 뜻입니다.

57의 이진 표현은 (1바이트)입니다. 비트 부정 후의 이진수(~57): 11000110 이것은 십진수로 표현됩니다: -70
이것은 음수, 부호 있는 숫자는 컴퓨터에서 보수로 표시됩니다. 보수 = 부호 비트가 비트 반전된 후 추가합니다. 1.
그래서 -70(11000110) 부호 비트를 비트 단위로 반전하면 (10111001)이 됩니다. 1을 더하면 (10111010)이 됩니다.
10진수로 변환하면: -58
그래서 ~57 =-58

이제 나는 마침내 그것을 이해합니다. 요약된 공식은 신속하게 결과를 생성할 수 있지만 기술적인 측면에서 그 이유를 설명할 수는 없습니다.

위 내용은 JS 연산자 '!~'에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.