포스트

9. 자바 기초(3)

자바의 기초 언어를 공부하자.

9. 자바 기초(3)

줄바꿈 코드

Linux/unix : LF(line Feed)만 삽입 = 0x0A Window : CR/LF (carrage Return) 으로 삽입 = 0x0D/0x0A

문자 집합

1. ISO-8859(or latin)-1(or 2~)

  • ASCII(7bit) + a(1bit) 128자 ←프랑스, 독일 … 등

2. euc-kr(16bit)

  • ISO-8859-1 +한글(2350자)

3. 조합형(2byte) = 아래아한글

  • 초성(5bit), 중성(5bit), 종성(5bit) ex. 걶 → 1(한글) 00010(초성) 00111(중성) 00111(종성) 4bit씩 다시 묶기 0x 8(1000) 8(0100) E(1110) 7(0111)

국제 표준X, 16bit의 절반을 한글이 사용 → 일본, 중국 문자가 없음

4. MS949(2byte) = CP949

  • EUC-KR(2350자) + a = 1172자 똘똠똡똣똥 → B6CA 8C63 8C64 8C66 B6CA
    빨간색 : ms949에서 추가한 코드 / 파란색 : 기존 EUC-KR에 있던 코드
  • 국제표준X

5. Unicode(4byte = 32bit)

  • 실제는 최대 21bit만 사용(0x0000~0x10FFFF → 0000 0000 0001 0000 1111 1111 1111 1111 최대 21bit)
  • 전세계 문자코드새로 지정 똘똠똡똣똥 → B618 B620 B621 B623 B625
  • 국제 표준 O
  • 한글 및 영어 모두 2byte 사용 → 영어도 2byte로 저장되어 단점

자바에서 문자를 다룰 때 : UTF-16으로 사용

6. UTF-8(Universal coded character set Transformation Format 8bit)

  • unicode 변형
  • 영어는 유니코드로 가져감. 000000~00007F → 7bit로 변환, ex. A → 0000 0000 0100 0001 → 0100 0001
  • 한글 등 새로운 언어들은 3byte로 통합 000800~00FFFF → 3byte로 변환, 한글 AC00~D7A3
    ex. XXXX XXXX XXXX XXXX ⇒ 3byte 1110XXXX 10XXXXXX 10XXXXXX

encoding / decoding (인코딩 / 디코딩)

A값 ⇒변환(encoding) - encoder⇒ B값
A값 ←되돌리기(decoding) - decoder ← B값

퍼센트 인코딩

“검색어 : 가각간” = EAB080 EAB081 … ⇒(URL Encoding = percent(%) Encoding)⇒ “%EA%B0%EA…%84” = 25(%)454125(%)4230253830…
3byte가 27byte로 변경되어 메모리에 저장됨

숫자를 메모리에 저장하는 방법

1. Sign-Magnitude (부호 절대값)

13 → 0(부호비트)0001101 = 0x0D / -13 → 0(부호비트)1001101

  • 맨 앞자리를 부호의 비트로 두고 +면 0 -면 1
  • 부동 소수점의 ‘가수부’를 저장할 때 사용
  • 13 - 4 = 13 + (-4) = 9 → 00001101 + 10000100 = -17 (틀린 답이 나옴 그래서 수의 계산에 적합하지 않아 잘 사용하지 않음)

2. 1의 보수

13 → 00001101 / -13 → 11110010

  • 양수와 모든 자리수를 반대로 한다.
  • 수를 저장할 때 안 씀
  • 13 - 4 = 13 + (-4) = 9 → 00001101 + 11111011 = 8 (정답보다 1이 적음)

3. 2의 보수 (=1의 보수 +1)

13 → 00001101 / -13 11110011

  • -일 때 1의 보수 상태에서 값 1(0000 0001)을 +해줌
  • 13 - 4 = 13 + (-4) = 00001101 + 11111100 = 9 (overflow는 깔끔히 버린다)
  • 정수를 저장 할 때 사용 하는 방법

4. Excess-K (= bias 값을 더해 저장)

  1. K값(bias 값) 구하기 : K = $2^{(bit-1)}-1$ = $2^{(8-1)}-1$= $2^{(7)}-1$ = 128-1 = 127
  2. 128+127 = 255 = 11111111, 1 + 127 = 128 = 10000000, 0 + 127 = 127 = 01111111, -1 + 127 = 126 = 01111110, -127 + 127 = 0 = 00000000
  3. ex. 13 + 127 = 140 = 10001100 / -13 + 127 = 114 = 01110010
    • 부동 소수점의 ‘지수부’를 저장할 때 사용

부동소수점(floating-point)의 메모리 저장

12.375 → 2진수 변환(IEEE-754 명세에 따라 변환) → 메모리 저장 가능
12 → 1100 , 0.375 → 0.375 x 2 = 0.75 ⇒ 0 / 0.75 x 2 = 1.5 ⇒ 1 / 0.5 x 2 = 1.0 ⇒ 1 == 0.375 = 011
12.375 = 1100.011 ⇒정규화(= 일관된 형식으로 변환)⇒ 374.456 = 3.74456 x 10²
1100.001 ⇒ 1.100011 x 2³ (무조건 왼쪽이 1이 남게 변환 무조건 1이기 때문에 버림.)
100011 (= 가수부) x 2³ (= 지수부)
1bit(부호 비트) 8bit(지수부) 23bit(가수부) = 32bit(float)

  • 가수부 : Sign-Magnitude 방식 → 1000 1100 0000 0000 0000 0000
  • 지수부 : excess-k(k=2⁽⁸⁻¹⁾-1 = 128-1 = 127) 3(2³ ← 3승을 더해줌)+127 = 130 = 10000010 ⇒ 0(부호)10000010
  • 최종 : 0100 0001 0100 0110 0000 0000 0000 0000 = 0x 41 46 00 00

정리

값을 메모리에 저장하는 방법

  • 문자 ⇒문자 집합 규칙⇒ 2진수 ⇒ 메모리
  • 정수 ⇒2의 보수 규칙⇒ 2진수 ⇒ 메모리
  • 부동소수점 ⇒IEEE-754 규칙⇒ 2진수 ⇒ 메모리
  • 색상(RGB), 소리(주파수) ⇒ 2진수 ⇒ 메모리

즉, 어떠한 값을 2진수로 변환 가능하다면 메모리에 모두 담을 수 있다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.