자바스크립트에서 밝히는 이중 틸터(~~)의 정체
자바스크립트에서는 연산자가 눈에 띕니다. 그 수수께끼의 기능으로. 일반적으로 단일 물결표(~)는 비트 NOT을 의미하므로 우리가 고민하게 만드는 것으로 알려져 있습니다. 이중 물결표()는 무엇을 달성합니까?
비트 부정을 두 배로 늘린다는 직관과는 달리 ~~ 연산자는 놀라운 효과가 있습니다. 숫자의 소수 부분을 자르고 가장 가까운 정수로 효과적으로 반올림하는 기능이 있습니다.
뒤에서 ~~ 연산자는 피연산자를 부호 있는 32비트 정수로 처리하여 작동합니다. 피연산자의 실제 유형(숫자, 문자열 등)에 관계없이 비트 연산. 결과적으로 소수 부분은 버려지고 결과는 항상 숫자입니다.
정확히 ~~ 연산자는 기본적으로 다음 기능을 시뮬레이션합니다.
function truncate(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x); }
그러나 이 연산은 유효합니다. x 값이 -(2^31)에서 2^31 - 1(포함) 범위 내에 있는 경우에만 true입니다. 이 범위를 벗어나면 오버플로가 발생하여 예측할 수 없는 결과가 발생할 수 있습니다.
~~는 문자열 인수를 숫자로 신속하게 변환하는 데 유용할 수 있지만 제한 사항(정수가 아닌 값에 대한 오버플로 및 잘못된 동작 가능성)은 수치 조작에는 덜 바람직합니다. 대신 일반적으로 이러한 목적으로 x 또는 Number(x)를 사용하는 것이 좋습니다.
이중 부정 해독
부정의 부정에 대한 ~~ 연산자를 이해하려면 다음이 필요합니다. 이진 표현에 대해 더 자세히 알아보세요. 부호 있는(2의 보수) 32비트 이진 형식으로 표현된 숫자 -43.2를 예로 들어 보겠습니다.
-43.2<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub>
모든 비트를 반전(비트 단위 NOT)하면 다음이 생성됩니다.
NOT -43<sub>10</sub> = 00000000000000000000000000101010<sub>2</sub> = 42<sub>10</sub>
부정을 한 번 더 적용하면 다음과 같은 결과가 나옵니다.
NOT 42<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub> = -43<sub>10</sub>
이 최종 결과(-43)는 Math.floor(-43.2)의 결과인 -44와 다릅니다. ~~는 내림하는 Math.floor와 달리 0에서 멀어지는 방향으로 숫자를 내림하기 때문입니다.
위 내용은 ## JavaScript에서 이중 물결표 연산자(~~)가 실제로 수행하는 작업은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!