본문 바로가기
Language/JavaScript

[TIL] JavaScript - tilde( ~ ), double tilde( ~~ )

by pin9___9 2022. 12. 12.
728x90

서론 

알고리즘 문제를 풀면서 신기한 연산자를 봤습니다. 물결을 두 번 써서 알고리즘 문제를 풀으셨길래 궁금해서 찾아보니 double tilde 연산자가 검색되었습니다. 블로그 정리하면서 천천히 공부해 보려고 합니다.

 

tilde( ~ ) 연산자

우선 tilde( ~ ) 연산자는 비트 연산자이며 NOT의 기능을 한다고 합니다. 비트(bit) 단위로 논리 연산을 수행하기 때문에 비트가 1이면 0으로, 0이면 1로 반전시킵니다.

const a = 5;     // 0000000000000101
console.log(~a); // 1111111111111010
// -6

const b = -3;    // 1111111111111101
console.log(~b); // 0000000000000010
// 2

 

위의 식을 예로 보면 결과적으로 2의 보수 -(n+1)과 같은 결과를 나타냅니다.

 

double tilde( ~~ ) 연산자

double tilde( ~~ ) 연산자는 말그대로 이중 NOT 비트 연산자입니다. 양수에 대해서는 Math.floor( )와 같은 결과를 나타내 주고, 음수에 대해서는 Math.ceil( )과 같은 결과를 나타내 줍니다. 

 

속도 측면에서 double tilde( ~~ ) 연산자가 Math.floor( )보다 빠르며 double tilde, Math.floor, parseInt 의 속도를 비교했을 때, double tilde, Math.floor, parseInt 순으로 double tilde가 가장 빠른 퍼포먼스를 보여주었습니다.

 

하지만 성능 차이가 아주 적기 때문에 문맥의 이해가 어려운 double tilde보단 Math.floor를 사용하는 것이 더 나은 경우가 있을 수 있습니다.

 

const a = 25.6
console.log(~~a) //25
console.log(Math.floor(a)) //25

const b = -46.7
console.log(~~b) // -46
console.log(Math.ceil(b)) // -46

 

음수일 경우 Math.floor를 사용할 경우 결과값이 다르므로 조심해야 합니다.

 

마치며

근래 집안 일이 생겨 공부를 하지 못했는데, 마음 잘 가다듬고 내일부터 집중해서 다시 열심히 공부해야겠습니다.

 

 

728x90

'Language > JavaScript' 카테고리의 다른 글

[JavaScript] 옵셔널 체이닝  (0) 2023.01.18
[TIL] JavaScript - This (bind, call, apply)  (0) 2022.12.07
[TIL] JavaScript - This  (1) 2022.12.06
[TIL] JavaScript - 구조 분해 할당 (Destructuring)  (0) 2022.12.05
[TIL] JavaScript - DOM  (0) 2022.12.01

댓글