[Front-end] 개발자 공부

[개발 공부 84일차] ~(Bitwise NOT), ~~, >>> 연산자

MOLLY_ 2024. 7. 24. 00:26
728x90

<목차>
0. TL;DR
1. ~ (Bitwise NOT 연산자)
2. ~~ (Double Bitwise NOT 연산자)
3. >>> (부호 없는 오른쪽 시프트 연산자)

 

 

~~ 연산자 발견

 

코딩 테스트 문제를 풀고 다른 사람의 풀이는 어떨지 궁금해서 봤다. 위와 같이 처음 보는 연산자를 사용해서 문제를 풀었길래 신기해서 ~~ 연산자에 대해서 공부해봤다.

 

 

 

0. TL;DR

  • ~: 비트 단위 NOT 연산을 수행하여 비트를 반전시킴
  • ~~: 숫자의 소수 부분을 제거하고, 정수 부분만 반환함
  • ~와 ~~ 연산자는 비트 연산과 관련된 특정 작업이나 최적화된 정수 변환 등에 유용하게 사용될 수 있음

 

  • >>>: 피연산자의 이진 표현을 오른쪽으로 시프트하며, 부호에 상관없이 빈 자리를 0으로 채움
  • 부호 없는 정수로 처리하여 음수도 양수처럼 시프트함
  • 주로 부호를 무시하고 오른쪽 시프트 연산을 해야 할 때 사용

 

 

 

자바스크립트에서 ~와 ~~ 연산자는 각각 비트 연산자와 수학적 연산자로, 다음과 같이 사용된다.

 

1. ~ (Bitwise NOT 연산자)

비트 단위로 NOT 연산을 수행. 즉, 숫자의 모든 비트를 반전시킨다.

 

  • 작동 방식: 32비트 정수로 변환한 후, 각 비트를 반전시킨다.
  • 용도: 비트 단위 연산이나 특정 상황에서 빠르게 -1을 곱한 결과를 얻고 싶을 때 사용할 수 있다.

 

 

예제

let num = 5; // 00000000000000000000000000000101 (이진법)
let result = ~num; // 11111111111111111111111111111010 (이진법), 십진수로는 -6임
console.log(result); // -6

 

 

[Reference]

 

 

 

2. ~~ (Double Bitwise NOT 연산자)

: 숫자의 소수 부분을 버리고 정수 부분만 반환하는 역할

 

  • 작동 방식: 첫 번째 ~가 숫자의 비트를 반전시키고, 두 번째 ~가 다시 비트를 반전시켜 원래 숫자의 정수 부분을 반환한다.
  • 용도: 소수점을 버리고 정수 부분만 필요할 때 사용한다. Math.floor()나 parseInt()보다 빠르게 동작할 수 있다.

 

 

예제

let num = 5.67;
let result = ~~num; // 결과는 5 (정수 부분만 남음)
console.log(result); // 5

 

 

[Reference]

 

 

 

3. >>> (부호 없는 오른쪽 시프트 연산자)

피연산자의 이진 표현을 오른쪽으로 시프트한다.

왼쪽에 생긴 빈 자리는 0으로 채우고, 오른쪽으로 밀려난 비트는 버린다.

 

  • 작동 방식
    • 피연산자를 32비트 부호 없는 정수로 변환한다.
    • 오른쪽으로 지정된 비트 수만큼 시프트한다.
    • 왼쪽의 빈 자리는 0으로 채운다.

 

  • 주요 특징
    • 부호 비트는 영향을 받지 않기 때문에, 항상 0으로 채워진다.
    • 음수를 포함한 모든 숫자를 양수로 취급한다.

 

 

예제

let num = -8; // 32비트 표현: 11111111111111111111111111111000
let result = num >>> 2; // 00111111111111111111111111111110 (결과는 1073741822)
console.log(result); // 1073741822

 

 

 

용도

  • 부호 없는 연산: 음수를 양수로 변환한 후, 시프트 연산을 할 때 사용
  • 빠른 나눗셈: 2의 거듭제곱으로 나누는 경우에 유용
let num = 16;
let result = num >>> 1; // num을 2로 나눈 결과 (8)
console.log(result); // 8

 

 

[Reference]

 

 

 

728x90