현재 목표는 프로그래머스의 0레벨 100문제를 전부 풀어보는것인데
현재 100개중 45개를 푼 상태이다. 그래서 곧 고지가 눈 앞인데...
다른사람의 풀이를 보다가 ~~ 연산을 사용해서 몫을 구하는 사람들이 있어
틸트(~)가 뭔지 알아보다가 적는 포스팅이다.
이진수와 Not 연산
나는 인간이니까 십진수가 거의 디폴트로 박혀있는 상태이지만,
컴퓨터는 이진법(0,1)로 연산한다는걸 마음속에 저장하면서 프로그래밍을 배워야 한다.
JS에서 ! 를 붙이면 NOT이 된다는건 아는데, 그럼 물결(틸트)는 뭐냐?
이진수로 바꾸고 NOT을 붙인다는 소리인데... 사실 잘 와닫지 않는다.
예를들어 1을 틸트연산자 ~1을 출력하면 -2가 출력되는데, 이 원리를 간단히 알아보자면
1을 이진수로 바꾸면 00000001(2) 인데, 이걸 NOT 연산자로 치환하면
11111110 정도가 되겠다. 이걸 십진수로 바꾸면 -2 가 되는데 결국 틸트 연산자는
-(n+1)의 결과를 출력한다.
그런데 이걸 써먹는곳은 크게 두가지가 있는데
1. JS메소드 줄이기
검색 관련한 메소드에서, 예를들어 IndexOf() 같은 메소드는
해당 인덱스가 존재하면 인덱스를 뱉어내고, 없으면 -1을 반환하는 메소드인데
이 틸트 연산자를 사용하여 (-1을 틸트 연산자를 사용하면 0이 된다!)
조건문 작성시 조금 간편하게 사용할수 있다는 정도.
근데 사실 연산속도도 크게 차이 없고, 사실상 사용한 케이스를 거의 보지 못했다.
2. ~~를 사용하면 '버림'이 된다!
원본값을 반환하게 되는데, 앞서 말한것처럼 이 ~는 비트 연산이고,
소수점 아래 비트는 버리는 성질을 가지게 된다. 즉 몫을 구할때
Math.trunc같은걸 대체할 수 있고, 무엇보다 기계어와 가까운 비트 연산이기때문에
연산 속도 자체가 빠르다는 것!
사실 이 두번째 목적이 99% 틸트 연산자의 사용목적(정확히말하면 더블틸트) 아닐까 싶다.
--------
결론
몫 구하고싶을때 ~~ 를 사용해보자.
'Programming Language > Javascript,Typescript' 카테고리의 다른 글
자바스크립트 클로저(Closure) 알아보기 (0) | 2023.08.23 |
---|---|
호이스팅과 type of null 버그에 대해 알아보자 (0) | 2023.08.21 |
Javascript - 자바스크립트는 어떻게 실행되는가? (AST 등) (0) | 2023.08.02 |
This binding 과 화살표 함수 (0) | 2023.05.29 |
반복문 중괄호 생략, 한줄에 코드 두줄(?)넣기 (0) | 2023.05.25 |