서론
알고리즘 문제를 풀면서 신기한 연산자를 봤습니다. 물결을 두 번 써서 알고리즘 문제를 풀으셨길래 궁금해서 찾아보니 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를 사용할 경우 결과값이 다르므로 조심해야 합니다.
마치며
근래 집안 일이 생겨 공부를 하지 못했는데, 마음 잘 가다듬고 내일부터 집중해서 다시 열심히 공부해야겠습니다.
'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 |
댓글