16진수 : 0~9 + a~f
10진수 : 0~9
8진수 : 0~7
2진수 : 0~1
정수의 진법 변환 : /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)
양수를 음수로 변환하는 방법
- 음수 절대치를 구한다.
- 보수를 취한다.
- 1을 더한다.
양수 : 정수 10 = [0000 1010]
음수 절대치를 구한다.
|-10| == 10
보수를 취한다.
0000 1010 → 1111 0101
1을 더한다.
1111 0101 → 1111 0110
음수 : 음수 -10 = [1111 0110]
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을 쓰는 경우가 많다.
기능 : 문자열로로 변환
매개변수 : 값, 진수
리턴 자료형 : 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
기능 : 바이너리 코드로 변환
매개변수 : 정수
리턴 자료형 : 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