진법, 비트연산

janjanee·2021년 2월 21일
0

Java

목록 보기
1/17

개념은 몇 번 봐서 익숙하지만 갑자기 생각이 잘 안 날때 보고 빨리 기억하려고 짧게 정리!

진법

10진수

  • 0~9 까지 10개의 숫자로 표현
  • 일상생활에서 우리는 10진수를 사용
// 한 자리수
0, 1, 2, 3, 4, 5, 6, 7, 8, 9

// 두 자리수
10, 11, 12, 13, 14, 15, ..., 99

// 세 자리수
100, 101, 102, ..., 999

2진수

  • 0~1 까지 2개의 숫자로 표현
  • 2진수(Binary number)를 표현하기 위한 '0b' 를 붙임
// 한 자리수
0, 1

// 두 자리수
10, 11

// 세 자리수
100, 101, 110, 111

// 0b 표기
0b00, 0b01, 0b10, 0b11, 0b100, 0b101, 0b110, 0b111

16진수

  • 0~F 까지 15개의 숫자 및 영문자로 표현
  • 16진수(Hexadecimal number)를 표현하기 위한 '0x' 를 붙임
// 한 자리수
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

// 두 자리수
10, 11, 12, ..., FF

// 세 자리수
100, 101, 102, 103, ..., FFF

// 0x표기
0x00, 0x01, 0x02, ..., 0x0F, 0x10, 0x11, ..., 0xFF, 0x100, 0x101, ..., 0xFFF

2의 보수

  1. 1의 보수를 구한다. (0→1, 1→0)
  2. 결과에 1을 더한다.
1 0 0 1 0 0 0 1

// 1의 보수 
0 1 1 0 1  1 1 0

// 1 더한 결과
0 1 1 0 1 1 1 1

비트연산

<<

  • 왼쪽으로 쉬프트
  • 빈자리 0으로 채워짐
// 3을 1만큼 왼쪽 이동
3 << 1 

// 결과

0 0 0 0 0 0 1 1   // 3

0 0 0 0 0 1 1 0   // 3 << 1 = 6

// 3을 5만큼 왼쪽 이동
3 << 5

0 0 0 0 0 0 1 1  // 3

0 1 1 0 0 0 0 0  // 3 << 5 = 96

>>

  • 오른쪽으로 쉬프트
  • 빈자리 최상위 부호 비트로 채워짐
  • >>> : 빈자리 0으로 채워짐
// 8을 3만큼 오른쪽 이동
8 >> 3

// 결과
0 0 0 0 1 0 0 0   // 8

0 0 0 0 0 0 0 1   // 8 >> 3  = 1

// -8을 2만큼 오른쪽 이동(>>)
-8 >> 2

1 1 1 1 1 0 0 0   // -8

1 1 1 1 1 1 1 0   // -8 >> 2 = -2

// -8을 2만큼 오른쪽 이동(>>>)
-8 >>> 2

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0   // -8

0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0    // -8 >>> 2 = 1073741822

& (AND)

  • 둘 다 1 이면 1
1 1 0 1 0 0 1 0
0 0 0 1 0 1 0 0

// 결과
0 0 0 1 0 0 0 0

| (OR)

  • 둘 중 하나라도 1이면 1
1 1 0 1 0 0 1 0
0 0 0 1 0 1 0 0

// 결과
1 1 0 1 0 1 1 0

~ (NOT)

  • 비트반전
1 1 0 1 0 0 1 0

// 결과
0 0 1 0 1 1 0 1

^ (XOR)

  • 둘 다 다르면 1
  • XOR를 같은 특정 숫자로 두 번 연산하면 원래의 값이 나옴
1 1 0 1 0 0 1 0
0 0 0 1 0 1 0 0

// XOR 결과
1 1 0 0 0 1 1 0

// 같은 숫자로 다시 XOR 연산
1 1 0 0 0 1 1 0
0 0 0 1 0 1 0 0

// 결과(처음과 동일한 숫자)
1 1 0 1 0 0 1 0
profile
얍얍 개발 펀치

0개의 댓글