[JAVA] 비트 연산자 정리

2021. 4. 6. 00:35·JAVA
728x90

비트 연산자

비트 연산자는 말 그대로 비트 단위로 연산이 이루어지는 연산자이다.

'암호화' 작업처럼 임의의 숫자를 만든다거나, 메모리 용량이 부족할 때, 계산이 복잡해서 속도가 느려질 때 비트 연산자를 이용해서 빠른 속도로 계산을 할 수 있다. 데이터는 컴퓨터 내부에서 0과 1로 이루어져 있기 때문에, 0 또는 1로 표현할 수 있는 최소단위인 비트로 계산할 때 속도가 빠른 것이라고 이해할 수 있다.

비트 (bit) : 0 또는 1로 표현할 수 있는 최소 단위, 8비트가 모이면 1 바이트(Byte)가 된다.

비트 논리 연산자  & | ^ ~

& (AND) 연산자

두 개의 비트값이 모두 1인 경우에만 연산 결과 값이 1이 된다.

int num1 = 5;
int num2 = 10;
int result = num1 & num2;
    	num1 = 00000101
    &   num2 = 00001010
    ------------------------    
      result = 00000000

5 & 10 의 결과값은 0이다.

 

| (OR) 연산자

비트 값 하나라도 1이면 연산 결과 값이 1이 된다.

int num1 = 5;
int num2 = 10;
int result = num1 | num2;
    	num1 = 00000101
    |   num2 = 00001010
    ------------------------    
      result = 00001111

5 | 10 의 결과값은 15이다.

 

^ (XOR) 연산자

비트 값이 다르면 1, 같으면 0의 연산 결과 값을 가진다.

int num1 = 5;
int num2 = 10;
int result = num1 ^ num2;
    	num1 = 00000101
    ^   num2 = 00001010
    ------------------------    
      result = 00001111

5 ^ 10 의 결과값은 15이다.

 

~ (반전) 연산자

비트 값을 0은 1로, 1은 0으로 바꾸는 연산자

int num = 5;
int result = ~num;
 num = 00000101
~num = 11111010

위 경우는 부호비트가 1로 바뀌었기 때문에 음수 값으로 변경된다.

음수 값은 양수로 다시 변환해야 값을 알 수 있는데, 2진수 11111010을 10진수로 변환하면 6이 되고, 따라서 ~num1의 값은 -6이다.

 


비트 이동 연산자 <<, >>, >>> shift 연산자

<< 연산자

<< 시프트 연산자는 왼쪽으로 비트를 이동하는 연산자

int num = 5;
int shift = num << 2;
num = 00000101
num << 2 = 00010100

00000101 을 두 비트만큼 왼쪽으로 이동하라는 뜻

이 때, 앞 두자리 00은 없어지고 뒷부분이 0으로 채워진다.

따라서, 왼쪽으로 n 비트 이동한다는 것은 기존 값에 2ⁿ 만큼 곱한다는 뜻이다.

왼쪽으로 2비트 이동한 5는 00010100이 되어 5*2² = 20 이 된다.

 

>> 연산자

>> 시프트 연산자는 오른쪽으로 비트를 이동하는 연산자

int num = 5;
int shift = num >> 2;
num = 00000101
num >> 2 = 00000001

00000101 을 두 비트만큼 오른쪽으로 이동하라는 뜻

오른쪽으로 n 비트 이동한다는 것은 기존 값에 2ⁿ 만큼 나눈다는 뜻이다.

따라서 오른쪽으로 2비트 이동한 5는 00000001이 되어 5/2² = 1 이 된다.

 

>>> 연산자

>>> 시프트 연산자는 >> 연산자와 동일하게 비트를 오른쪽이로 이동하는 연산자

차이점은 >>> 연산자는 왼쪽에 채워지는 비트값이 부호 비트와 상관없이 무조건 0이 된다.

 

 

 

728x90
저작자표시 비영리 동일조건 (새창열림)

'JAVA' 카테고리의 다른 글

How to Convert CamelCase to UnderScore & UnderScore to CamelCase  (1) 2023.01.14
[JAVA] 스택 / 큐  (0) 2021.04.06
'JAVA' 카테고리의 다른 글
  • How to Convert CamelCase to UnderScore & UnderScore to CamelCase
  • [JAVA] 스택 / 큐
heestory217
heestory217
Done is better than Perfect! 좌충우돌 개발일지💻
    250x250
  • heestory217
    Heello World
    heestory217
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • 컴퓨터일반 (0)
      • WEB (1)
      • JAVA (3)
      • Python (9)
      • C (1)
      • DataBase (17)
        • Oracle (2)
        • MySQL (9)
        • SAP HANA (4)
        • PostgreSQL (0)
      • 디버깅∕오류해결 (14)
      • 코딩테스트 (54)
        • 자료구조∕알고리즘 (3)
      • 정보처리기사 (10)
      • Git∕GitHub (7)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정처기 수제비
    Sort a HashMap in Java
    인텔리제이
    정처기 수제비 실기문제
    파이썬 포맷팅
    hashmap sort
    leetcode
    IntelliJ
    정처기 수제비 데일리 문제
    treemap
    Guava library
    코딩테스트
    MySQL
    SAP HANA Studio
    treeset
    정처기 실기 예상문제
    HashMap
    배열 정렬하기
    프로그래머스 카카오
    정처기 실기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
heestory217
[JAVA] 비트 연산자 정리
상단으로

티스토리툴바