1. 문자집합
1.1 문자 집합의 발전과정 및 특징
- ACII 코드
- 알파벳을 2진코드로 변환하기 위해 만들어진 약속
- 7비트로 128개의 문자를 저장가능
※ 줄바꿈 코드
- 운영체제 별로 줄바꿈(개행 방법이 다르다)
- Linux/Unix : LF(Line Feed) 0x0A
- Window : CRLF(Carrage Return Line Feed) 0x0D 0x0A
- 과거 OS간에 개행에 대한 호환이 안되었지만 지금은 호환가능하다.
- ISO-8859-1
- 기존 ASCII/ANSI 방식의 확장버전
- ISO-8859-1~4 버전까지 있으며, 기존 ASCII 문자와 추가적인 라틴계열 문자가 더해졌다.
- EUR-KR
- 한글 도입을 위해 도입된 인코딩 방식
- 한글 2350자를 나타 낼수 있지만, 한글 음절의 수는 11,172자로 고어를 포함한 일부 음절은 인코딩이 불가능하다.
ex) "똡","똣"
- 조합형
- 기존 완성된 글자를 2진코드로 변환한것(완성형)과 달리
- 한글의 초성,중성,종성을 가지고 조합하여 글자를 인코딩하는 방법(조합형)
- 한컴오피스의 초창기 적용된 인코딩방식(당시 MS949는 없었다.)
- 총 2byte(16bit)로 한글(1bit) + 초성(5bit), 중성(5bit), 종성(5bit)으로 구성되어 있다.
- 한국어 자체 인코딩으로 국제표준이아니다.(16bit의 절반을 한글이 사용하면 다른나라 언어 어케 적용해...)
- MS949(CP949)
- MS에서 한글을 지원하기 위해 만든 문자집합
- EUC-KR + 알파 하여 11,172자를 표현할 수 있다.
- EUC-KR 기반으로 2byte를 차지하며, 국제 표준은 아니다.
- Unicode(UTF-16)
- 전세계 문자코드를 새로 지정
- 32bit를 할당 했지만 실제 사용되는 코드는 21비트만 사용한다.
- 한글과 영어 모두 2byte로 표현 가능하다.
- 국제 표준이고 자바에서 문자를 다룰 때 사용한다.
- UTF-8
- 서구권에서는 기존 1Byte만 할당하던 문자를 2Byte까지 늘려야 하는 문제가 발생
(메모리 1bit가 귀하던 시절에..)
- UTF-16을 변형하여 새로이 적용
- 영어는 1Byte를 사용하고 한글은 3Byte를 사용한다.(한국에서 초전도체 나오기 전까지 안바뀔듯)
2. 수를 메모리에 저장하는 방법
2.1 Sign-Magnitude방식
- 최상위 비트에 부호비트(양수 : 0, 음수 : 1)를 할당하고 나머지 비트에는 절대값을 할당한다.
- 사용하기 간단하나 양수+음수 계산에서 잘못된 결과를 산출한다.
ex) 0001(1) + 1001(-1) = 1010(-2) ?!?!
- 0이 두개의 값으로 존재한다. (+0,-0)
- 그렇기 때문에 일반적인 정수로 사용하지 않고, 부동소수의 가수부에 사용된다.
2.2 1의 보수
- 주어진 비트를 반전
- 마찬가지로 양수 + 음수에서 잘못된 결과를 가져온다.
2.3 2의 보수
- 1의 보수에서 1을 더하여 얻은 값
- Java에서 음수를 적용할 때 사용하는 방법(대부분의 언어에서 위 방식을 사용)
- 부호가 다른 같은 수를 더하면 0이 나온다(자리수가 올라가서 overflow가 발생하므로)
2.4 K-excess
- bias를 적용하여 값의 기준을 이동한다.
8bit 기준으로 a = 13을 변환하면
- k(bias) = 2^(8-1)-1 = 127
- a + k = 13 + 127 = 140
- 140 = 0b1000 1100 = 0x8C
- 부동소수점의 지수부를 저장할때 사용한다.
2.5 부동소주를 메모리에 저장하는 방법
- 부동소수는 float, double이 있다.
- 부동소수 저장 방법은 IEEE754에 따른다.
부동소수 계산 방법
1) 값을 2진수로 변환
2) 정규화
3) 가수부는 sign-magnitude 지수부는 k-excess 방식으로 변환
ex) 12.375
1) 2진수 변환 : 1100.011
1.1) 12변환 : 0b 0000 1100
1.2) 소수부 변환
0.375 변환 : 0.375 * 2 = 0.75 ---- 0
0.7 변환 : 0.75 * 2 = 1.5 ---- 1
0.5 변환 : 0.5 * 2 = 1.0 ---- 1
0.375 변환 : 0b 011
2) 정규화 : 1.100011 * 2^3
2.1) 정규화를 통해 가수부는 항상 1이므로 1을 무시한다.
3) 가수부 : 100011, 지수부 : 1000 0010 (3+127 = 130)
결과
부호 비트 : 0
지수부 : 1000 0010
가수부 : 10001100000000000000000
0b : 0100 0001 0100 0110 0000 0000 0000 0000
0x : 4146 0000
'개발자 꿈나무의 하루 > 01_Boot Camp' 카테고리의 다른 글
(네이버클라우드 부트캠프) 9일차 - 실습프로젝트 (1) | 2024.06.05 |
---|---|
(네이버클라우드 부트캠프) 8일차 - Eclipse IDE설정 및 Java프로그래밍 기초(변수) (0) | 2024.06.04 |
(네이버클라우드 부트캠프) 6일차 - Java프로그래밍 기초(패키지, 자료형) (0) | 2024.05.31 |
(네이버클라우드 부트캠프) 5일차 - Bytecode작성 및 Java실습(class,main()) (0) | 2024.05.30 |
(네이버클라우드 부트캠프) 4일차 - Java 기본설정 및 Gradle 설치 (0) | 2024.05.29 |