> 웹 프론트엔드 > JS 튜토리얼 > 자바스크립트 연산자 '!~'에 대한 자세한 설명_기본지식

자바스크립트 연산자 '!~'에 대한 자세한 설명_기본지식

WBOY
풀어 주다: 2016-05-16 16:15:01
원래의
1491명이 탐색했습니다.

설 연휴가 다가오고 드디어 시간이 났습니다. 매일 다양한 기술기사를 찾아보며 이 상태가 대단합니다.

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

코드 복사 코드는 다음과 같습니다.

(함수 () {
변수 이름 = [];
반환 함수(이름) {
          addName(이름);
}
함수 addName(이름) {
If (!~names.indexOf(name))//존재하는 경우
를 추가하지 마세요.              names.push(이름);
console.log(이름);// ["linkFly"]
}
}())('linkFly');

if (!~names.indexOf(name))의 "!~" 연산자는 무엇을 의미하나요? 이해가 안 된다면 ~부터 시작하겠습니다.

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

검색 후 일부 기사에서는 한 문장만 손실되었습니다. 이진수를 부정합니다.

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

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

저자의 글을 예로 들어 이해해보세요

~는 비트 부정을 의미합니다. 부정은 00111이면 11000(비트 부정)이 된다는 뜻입니다.

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

이제야 이해가 되네요. 요약된 공식은 신속하게 결과를 생성할 수 있지만 기술적인 측면에서 그 이유를 설명할 수는 없습니다.

한숨의 시간:

토대는 위의 모든 것의 초석입니다. 도를 닦는 데 전념하면 길은 ​​길어질 것입니다.

위 내용은 이 글의 전체 내용입니다. 이 글을 통해 조금이나마 얻으실 수 있기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿