PS용 비트 연산자(bit masking) 정리

2021. 2. 14. 11:46·DEV/PS

내가 보려고 정리

 이 내용은 신촌 연합 알고리즘 캠프 강사님 말씀이다.

- 집합 관리

{0,1,2,3,4,5} 에서 부분집합 {0,1,4} 를 비트로 관리할 때 -> 0 1 0 0 1 1 로 관리 (5,4,3,2,1,0) 순서로 있으면 1, 없으면 0 

교집합 -> & 연산자, 합집합 -> | 연산자 사용

 

-i 번째 비트 구하기 

1. x & (1 << i) 

ex) 0 1 0 1 1 에서 3번째 비트를 구하려면 0 1 0 0 0 과 & 연산자를 취해주면 됨. 단, 이 때는 결과가 0이면 i번째가 0이고 0이 아니면 i번째가 1이구나로 판단

 

2. (x >> i) & 1

ex) 같은 예제에서 0 1 0 1 1 을 3만큼 right shift 해준 값과 & 연산을 취하면, 0 0 0 0 1 즉, 1과 & 연산을 취하게 된다.

그럼 전체 결과가 1인지 0인지로 판단 가능하다.

 

- i번째 비트를 0/1로 설정하기

1. 1로 설정하기  x | (1 << i)

x | (1 << i), 해당 자리에 1과 OR 연산 취해주면 1로 바뀌는 것 이용

만약 원래 그 자리가 0 인걸 알고 있다면 x + (1 << i) 를 사용해도 된다.

 

2. 0으로 설정하기 x & ~(1 << i)

ex) 0 1 0 1 1 에서 3번째를 0으로 바꾸고 싶을 때, 1 0 1 1 1 즉, 해당자리에 0을 주고 & 연산을 취하면 0으로 바뀌게 된다. 그러면 1 0 1 1 1 을 어떻게 찾느냐

-> 해당 자리만 1로 만든 0 1 0 0 0 에서 ~(NOT) 연산을 취한 값이다. 

즉,  x & ~(1 << i)

만약 원래 그 자리가 1인걸 알고 있다면, x - (1 << i) 로 사용할 수 있다.

 

- 마지막 n 비트 구하기 

x & ((1 << n) - 1)

ex) 0 1 0 1 1 에서 마지막 3 비트를 구하고 싶다면 0 0 1 1 1 과 &를 취해주면 된다. 

0 0 1 1 1 은 무엇이냐? 

-> 0 1 0 0 0 에서 1을 뺀 값이다.

따라서, x & ((1 << n) - 1) 

 

- i번째 비트 반전

x ^ (1 << i)

ex) 0 1 0 1 1 에서 3번째 1을 0으로 바꾸고 싶다면 0 1 0 0 0 과 XOR 연산을 취해주면 된다.

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'DEV > PS' 카테고리의 다른 글

[BOJ/11004] K번째 수 (QuickSelect로 풀기), c++  (0) 2021.02.18
[BOJ/8201] Pilots, c++  (0) 2021.02.15
[BOJ/1516] 게임 개발, c++  (0) 2021.02.08
[1520] 내리막 길, c++  (0) 2021.02.07
[14501] 퇴사, c++  (0) 2021.02.07
'DEV/PS' 카테고리의 다른 글
  • [BOJ/11004] K번째 수 (QuickSelect로 풀기), c++
  • [BOJ/8201] Pilots, c++
  • [BOJ/1516] 게임 개발, c++
  • [1520] 내리막 길, c++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (177)
      • DEV (146)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (20)
        • injection (1)
        • CI CD (0)
        • JS, TS (1)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    일상
    슬랙
    mongoDB
    typescript
    GitHub
    우선순위큐
    slack
    Nest.js
    react
    Express
    Nest
    DP
    렛츠락페스티벌
    node.js
    PS
    알고리즘
    SOPT
    슬랙봇
    이분탐색
    앱잼
    리액트
    솝트
    boj
    DFS
    nodejs
    위상정렬
    aws
    백준
    회고
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
jobchae
PS용 비트 연산자(bit masking) 정리
상단으로

티스토리툴바