~
⇒ tilde 연산자틸드 연산자는 이진수에 대해 비트 단위로 적용되는 연산자로, 이진수의 0과 1을 반대로 바꾸는 연산자라고 한다.
console.log(~1) // -2
console.log(~2) // -3
console.log(~-1) // 0
console.log(~-2) // 1
양수 n에 ~
연산자를 사용할 시 -(n-1)
, 음수 n에 사용 시, (n+1)
로 변환되는 것을 확인할 수 있다.
이러한 성질을 이용하여 indexOf()
와 같이 -1을 반환하는 메서드에 ~
연산자를 사용할 수 있다.
const hello = '안녕하세요'
if (hello.indexOf('안녕') !== -1) {
console.log("포함!")
}
// ~ 연산자를 사용해 코드를 줄일 수 있다.
if (~hello.indexOf('안녕')) {
console.log("포함!")
}
-1
에 ~
연산자를 사용할 경우 0을 반환하며, 자바스크립트에서는 0을 falsy하다고 보는 성질을 이용하여, 위처럼 코드의 양을 단축시킬 수 있다.
~~
⇒ double tilde 연산자알고리즘 문제 풀다가 다른 사람 풀이에서 발견한 연산자이다.
~
연산자와 기능은 동일하다.
특정 수 n에 ~~
연산자를 사용할 경우, ~
로 인해, n의 이진수의 0과 1의 위치를 바뀌고,
~
를 한번 더 사용하여 다시 0과 1의 위치를 바꾸기 때문에 동일하게 n
이 반환된다.
그러면 어차피 같은 수를 반환해 주는 ~~
연산자는 대체 어디에 쓰나? 싶었는데 ~
연산자 자체가 소수점을 버려준다고 한다.
console.log(~~(10/3)) // 3
console.log(~~(10/3) === Math.floor(10/3)) // true
소수점을 버려준다는 성질을 이용하여 ~~
연산자는 Math.floor()
와 동일하게 사용할 수 있다!
비트단위의 연산이기 때문에 메서드를 사용하는 것보다 속도가 빠르다!
아직은 낯설어서 그런가 가독성이 좋은 지는 잘 모르겠다...~~~🤔
혼자 알고리즘 문제 풀 때는 유용하게 쓸 법하지만 팀 단위로 진행되는 프로젝트에는 사용하지 않는 것이 좋을 것 같다!