~ 연산자와 ~~ 연산자 (tilde 연산자)

uxolrv·2023년 1월 1일
3

💡 ~  ⇒ 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() 와 동일하게 사용할 수 있다!




🔎 장단점

👍 장점

비트단위의 연산이기 때문에 메서드를 사용하는 것보다 속도가 빠르다!

👎 단점

아직은 낯설어서 그런가 가독성이 좋은 지는 잘 모르겠다...~~~🤔
혼자 알고리즘 문제 풀 때는 유용하게 쓸 법하지만 팀 단위로 진행되는 프로젝트에는 사용하지 않는 것이 좋을 것 같다!








profile
안녕하세연🙋 프론트엔드 개발자입니다

0개의 댓글