- Today
- Total
빵 입니다.
비트 NOT 연산자 (~ 연산자) 본문
정처기 공부할 때 ~ 연산자를 본 적 있다.
그저 공식을 외워 계산하기 바빴다.
알고리즘을 공부하며 또 다시 만난 ~
물.결
구박사님을 통해 검색을 해보니
이름은 하난데 별명은 서너개~
틸트 연산자? 틸데 연산자?
mdn에 tilt, tilde 둘 다 검색해도 안나온다...
찾다보니~~~ 비트 NOT 연산자를 찾았다!
정확한 명칭은 "비트 NOT 연산자"이다. (Bitwise NOT Operator)
물결로 표기하기 때문에 영단어 tilde(물결)를 써서 tilde 연산자라고 사용하는 것 같다.
틸트는 어디서 나온 말이지 -.- 틸데를 틸드로 읽은 게 구전되어 틸트가 된 게 아닐까 추측 ^^!...
사용법을 알아보자!
비트가 0일 경우엔 1로, 1일 경우엔 0으로 비트를 뒤집는다.
피연산자는 32비트 부호 있는 정수로 변환되고 일련의 비트(0과 1)로 표현되고, 피연산자의 비트를 반전한다.
해당 정수가 양수라면 음수가 나오고, 음수라면 양수로 나온다.
공식 : ~x === -(x + 1)
// 양의 정수
// 양의 정수 5를 이진법으로 나타내면 0000 0101
// 32비트 정수로 나타내면 00000000000000000000000000000101
const a = 5; // 00000000000000000000000000000101
console.log(~a); // 11111111111111111111111111111010
// 결과값 : -6
// 음의 정수
// 음의 정수 5를 이진법으로 나타내면 1111 1011
// 2의 보수 방식으로 음수 비트의 정수값 구하는 밥법
// - 부호를 떼고, 양의 정수 5를 이진법으로 나타낸 값을 구한다. 0000 0101
// 5의 1의 보수를 구한다. = 1111 1010
// 5의 1의 보수에 이진수 1을 더한다. = 1111 1010 + 0000 0001 = 1111 1011
const b = -5; // 111111111111111111111111 1111 1011
console.log(~b); // 00000000000000000000000000000100
// 결과값 : 4
Double Tilde Operator (~~)
~~ 을 사용하면 소수점(27.334)의 경우 정수(27)만 반환한다.
Math.floor()처럼 사용이 가능하단 의미인데, 속도가 빠르고 간결해서 알고리즘 풀 때 많이 사용하는 것 같다.
그.러.나 MDN에선 소수점의 소수점 삭제를 위해 ~~ 연산자를 사용하지 말라고 한다.
대신 Math.trunc() 를 사용하라고 권장한다.
어떤 숫자 x를 두 번 반환하면 32비트 정수로 변환하는데,
~-1 과 ~4294967295 (232 - 1) 둘 다 0으로 변환하기 때문이다.
아주 적은 확률일 수 있지만, 예기치 않은 상황을 발생시킬 수 있기 때문에 단순히 소수점 자르는 용도로 사용하지 말 것!
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT
https://velog.io/@proshy/JS-tilde%EA%B3%BC-double-tilde%EC%97%B0%EC%82%B0%EC%9E%90
'프론트엔드 > javascript' 카테고리의 다른 글
performance.now() (0) | 2024.02.29 |
---|---|
자바스크립트 옵셔널 체이닝 (Optional chanining) (0) | 2022.07.22 |
자바스크립트 런타임과 엔진 그리고 동작 원리 (0) | 2022.07.18 |
AJAX (0) | 2017.11.28 |
[Array 3/3] Array Methods (0) | 2017.11.06 |