알고리즘 문제를 풀다가 다른사람 풀이에 Tilde(~)연산자를 사용해서 문제를 더욱 간단하게 해결하는 것을 보았다.
그래서 Tilde 연산자 사용법을 알아보려한다.
Tilde(~) 연산자
~ 연산자를 사용하면 내부적으로 32비트 정수로 변환한 후 NOT 연산자를 실행한다. 이는 2의보수-(n+1)
값과 같다.
이러한 성질을 이용하여 참,거짓 처리를 할 수 있다. indexOf와 함께 사용하여 찾는값이 포함되어있는지 확인할 수 있다.
값이 존재하면 -(n+1) 값을 반환하므로 true처리 되고, 값이 없다면 0을 반환하므로 false 처리된다.
1
2
3
4
5
6
7
8
const str = "hi";
if(~str.indexOf("i")){
console.log('true');
}else{
console.log('false');
}
//결과 : true
Doble Tilde(~~) 연산자
Tilde 연산자를 두개 연속으로 사용하면 숫자의 소수점 이하 숫자들을 버려준다. Math.floor()
와 같은 역할을 하므로 코드량을 줄일 수 있다. 속도 측면에서도 Math.floor보다 빠르지만, Math.floor()보다는 가독성을 떨어뜨릴 수 있다.
1
2
console.log(~~23.23424); //23
console.log(Math.floor(23.23424)); //23
음수는 결과값이 달라질 수 있으므로 조심해야한다.