[자료구조] 시프트연산

2021. 12. 19. 22:49·Java/자료구조
728x90
반응형

시프트를 활용한 기본적인 연산인 N번째 비트를 핸들링하는 방법과 프로그래밍하는 방법에 대해서 알아보겠습니다.

 

 

1. GET - N 비트 가져오기

2. SET - N 비트 true

3. CLEAR - N 비트 false

4. CLEAR LEFT - N 비트 왼쪽으로 false

5. CLEAR RIGHT - N 비트 오른쪽으로 false

6. UPDATE - N 비트 true/false 제어하기

 


1. GET - N 비트 가져오기

boolean getBit( int num, int N ) {
	return num & ( 1 << N );
}
  • num = 13; 0b1101;
  • N = 3;
  • 1을 왼쪽으로 N번 만큼 쉬프트하고 AND 연산을 통해 있다면 true 없다면 false를 반환하여 

3번째 비트를 확인하고 1이기 때문에 ture를 반환

 

2. SET - N 비트 ture

int setBit( int num, int N ) {
	return num | ( 1 << N );
}
  • num = 5; 0b0101;
  • N = 3;
  • num | ( 1 << N ) = 13
  • 1을 왼쪽으로 N번 만큼 쉬프트하고 OR 연산을 통해 N 비트를 1로 set 

num의 3번째 비트를 1로 변경

 

3. CLEAR - N 비트 false

int clearBit( int num, int N ) {
	return num & ~( 1 << N );
}
  • num = 13; 0b1101;
  • N = 3;
  • num & ~( 1 << N ) = 5
  • 1을 왼쪽으로 N번 만큼 쉬프트 -> NOT연산 -> OR 연산을 통해 N 비트를 0으로 set 

num의 3번째 비트를 0으로 변경

4. CLEAR LEFT - N 비트 왼쪽으로 false

int clearLeftBit( int num, int N ) {
	return num & ( 1 << N ) - 1;
}
  • num = 173; 0b10101101;
  • N = 3;
  • num & ( 1 << N ) - 1 = 5
  • 1을 왼쪽으로 N번 만큼 쉬프트 -> 1000 -1 = 0111 -> AND 연산을 통해 N 비트 왼쪽을 0으로 set 

num의 3번째에서 왼쪽을 0으로 변경

 

5. CLEAR RIGHT - N 비트 오른쪽으로 false

int clearRightBit( int num, int N ) {
	return num & -1 << ( N + 1 );
}
  • num = 173; 0b10101101;
  • N = 3;
  • num & -1 << ( N + 1 ) = 160
  • -1을 왼쪽으로 (N+1)번 만큼 쉬프트 -> AND 연산을 통해 N 비트 오른쪽을 0으로 set 

num의 3번째에서 오른쪽을 0으로 변경

 

6. UPDATE - N 비트 true/false 제어하기

int updateBit( int num, int N, boolean flag ) {
	return (num & ~(1 << N)) | << (flag ? 1 : 0) << N ;
}
  • num = 181; 0b10110101;
  • N = 3;
  • flag = true;
  • (num & ~(1 << N)) | (flag ? 1 : 0) << N  = 189
  • 1을 왼쪽으로 N번 만큼 쉬프트 -> NOT 연산 -> AND 연산 -> flag에 의해 1을 N번을 쉬프트 -> OR 연산 -> N 번째 1으로 set

num의 3번 비트 1로 변경

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > 자료구조' 카테고리의 다른 글

덱(Deque) 보다 큐(Queue)와 스택(Stack)이 더 좋은 경우?  (0) 2025.03.11
Deque?  (1) 2025.03.11
스택? 큐?  (0) 2025.03.11
데이터 구조 선택 가이드  (0) 2025.03.11
[자료구조] 비트연산  (1) 2021.12.19
'Java/자료구조' 카테고리의 다른 글
  • Deque?
  • 스택? 큐?
  • 데이터 구조 선택 가이드
  • [자료구조] 비트연산
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (111) N
      • IT 지식 (4)
      • SW 방법론 (2)
      • Java (45) N
        • 자료구조 (6)
        • 디자인 패턴 (1)
        • 코딩테스트 (3)
        • 성능최적화 (1)
        • 알고리즘 (3) N
        • 스프링부트 (4) N
      • 학습 (0)
      • Tools (1)
      • SQL (4)
      • 리눅스 (40)
        • 문제해결 (1)
        • 명령어 (15)
        • Vim (3)
      • 네트워크 (1)
      • Docker (2)
      • 형상관리 (3)
        • Git (1)
        • SVN (1)
      • 자격증 (2)
        • 리눅스마스터1급 (1)
        • ADsP (1)
      • 웹(WEB) (5)
        • 톰캣(WAS) (1)
      • PC (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      스프링부트
      비트연산
      cifs
      불변
      java
      record
      /etc/passwd
      passwd
      분석기법
      문제해결
      자바
      apropos
      암호설정
      알고리즘
      REST API
      which
      docker
      man
      1급
      2차
      whereis
      ADsP
      whatis
      리눅스
      chmod
      su
      usermod
      DTO
      Chage
      mvc
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    크크크크
    [자료구조] 시프트연산
    상단으로

    티스토리툴바