본문 바로가기

카테고리 없음

[SWIFT] 비트연산자

메모리 비트 단위로 직접적인 논리연산을 하거나, 비트 단위 이동시에 사용하는 연산

장점) 

  1. 연산속도가 빠름 - 직접적으로 메모리의 실제 비트를 컨트롤 --> 게임과 같은 빠른 처리를 요구할 때 사용
  2. 짧은 코드로 복잡한 로직을 구현 가능한 경우가 있음

스위프트 비트연산자  6가지

 

 (비트 논리 연산자)

  •   ~  : Bitwise NOT Operator(비트와이즈 낫 연산자)
    • == 비트논리부정연산자, 단항연산자의 형태로 사용 (~a) 
    • 0은 1으로 , 1은 0으로
  •   &  : Bitwise AND Operator(비트와이즈 앤드 연산자)
    • == 비트논리곱연산자, 이항연산자의 형태로 사용 (a&b)
    • 두개의 메모리 비트 모두가 1일때만 1을 반환
  •    |  : Bitwise OR Operator(비트와이즈 오어 연산자)
    • 비트 논리합연산자, 이항연산자의 형태로 사용 (a | b)
    • 두개의 메모리 비트 중 하나라도 1이면 1을 반환
  •   ^  : Bitwise XOR Operator(비트와이즈 엑스오어 연산자)
    • 비트 논리 배타 연산자(또는 익스클루시브 OR 연산자), 이항연산자의 형태로 사용
    • 두개의 메모리 비트를 비교해서 서로 다르면 1을 반환

(비트 이동 연산자)

  • << : Bitwise Left Shift Operator(비트와이즈 레프트 시프트 연산자)
    • Unsigned(부호가 없는) 비트 이동 연산자의 경우 ( leftShiftBits << 1 )
      1. 기존비트를 요청된 값만큼 왼쪽이나 오른쪽으로 이동 
      2. 정수(integer)의 수용 범위를 넘어서는 비트는 어떤 것이든 버림
      3. 비트를 왼쪽으로 이동하면서 남는 공간에는 0을 삽입
    • Signed(부호가 있는) 비트 이동 연산자의 경우
      1. 기존비트를 요청된 값만큼 왼쪽이나 오른쪽으로 이동 
      2. 정수(integer)의 수용 범위를 넘어서는 비트는 어떤 것이든 버림
      3. 비트를 왼쪽으로 이동하면서 남는 공간에는 0을 삽입
  • >> : Bitwise Right Shift Operator(비트와이즈 라이트 시프트 연산자) 
    • Unsigned(부호가 없는) 비트 이동 연산자의 경우 ( rightShiftBits >> 1 )
      1. 기존비트를 요청된 값만큼 왼쪽이나 오른쪽으로 이동
      2. 정수(integer)의 수용 범위를 넘어서는 비트는 어떤 것이든 버림
      3. 비트를 왼쪽으로 이동하면서 남는 공간에는 0을 삽입
    • Signed(부호가 있는) 비트 이동 연산자의 경우
      1. 기존비트를 요청된 값만큼 왼쪽이나 오른쪽으로 이동 
      2. 정수(integer)의 수용 범위를 넘어서는 비트는 어떤 것이든 버림
      3. 비트를 왼쪽으로 이동하면서 남는 공간에는 0을 삽입
      4. ⭐️비트가 오른쪽으로 이동하면서 남는 공간에는 + 일땐 0 , - 일땐 1 삽입 (부호유지를 위한 삽입 : Arithmetic 산술 시프트)