진법 변환

이지현·2024년 3월 1일

진법 종류

16진수 : 0~9 + a~f
10진수 : 0~9
8진수 : 0~7
2진수 : 0~1

10진수에서 2진수로의 진법 변환

정수의 진법 변환 : /2를 계속 해서 더 이상 나뉘지 않을 때까지 계산

10 / 2 = 5 ...... [0]
5 / 2 = 2.5 ..... [1]
2 / 2 = 1 ....... [0]
1 / 2 = 0.5 ..... [1]

10 = 0000 1010

실수의 진법 변환 : *2를 계속 해서 소수점이 없어질 때까지 계산

0.625 * 2 = [1].25
0.25 * 2 = [0].5
0.5 * 2 = [1].0

0.101(2)

2의 보수법

양수를 음수로 변환하는 방법

  1. 음수 절대치를 구한다.
  2. 보수를 취한다.
  3. 1을 더한다.

양수 : 정수 10 = [0000 1010]

  1. 음수 절대치를 구한다.
    |-10| == 10

  2. 보수를 취한다.
    0000 1010 → 1111 0101

  3. 1을 더한다.
    1111 0101 → 1111 0110

음수 : 음수 -10 = [1111 0110]

왜 float보다 double을 많이 쓸까?

float f;  // 32비트 [[0(부호)][00000000(지수 8개)][00000000000000000000000 (가수 23개)]]
double d; // 64비트 [[0(부호)][00000000000(지수 11개)][0000000000000000000000000000000000000000000000000000(가수 52개)]]

9.1234567 이라는 값을 저장한다고 치자.
9는 1001이며, 9.1234567은 1001.00011111100110101.......(무한) 이다.

무한정 데이터를 저장할 수 없기 때문에 정규화 한다.
(1.xxx * 2^n ← 이런 형태로 고치는 것을 정규화 한다고 함)

9.1234567은 1.00100011111100110101 * 2^3
과 같은 형태로 저장되게 된다.

결론 : 오차가 생길 수 있기 때문에 모든 실수값은 그냥 double을 쓰는 경우가 많다.

진법 변환 함수

> Integer.toString()

기능 : 문자열로로 변환
매개변수 : 값, 진수
리턴 자료형 : String

int n = 10;

// 2진수로 변환
System.out.println(Integer.toString(n, 2)); 		// 1010

// 8진수로 변환
System.out.println(Integer.toString(n, 8)); 		// 12

// 10진수로 변환
System.out.println(Integer.toString(n, 10));		// 10

// 16진수로 변환
System.out.println(Integer.toString(n, 16));		// a

> Integer.toBinaryString()

기능 : 바이너리 코드로 변환
매개변수 : 정수
리턴 자료형 : String

int n = 10;

// 2진수로 변환
System.out.println(integer.toBinaryString(n))	// 1010

// 8진수로 변환
System.out.println(Integer.toOctalString(n));	// 12

// 16진수로 변환
System.out.println(Integer.toHexString(n));		// a
profile
병아리 개발자

0개의 댓글