Internal Language System
컴퓨터 언어의 기본 단위
섹션 제목: “컴퓨터 언어의 기본 단위”컴퓨터는 전기의 켜짐(ON)과 꺼짐(OFF)이라는 두 가지 상태만을 인식할 수 있으며, 이를 수학적으로 추상화한 것이 비트다.
- 비트(Bit): Binary Digit의 약자. 정보 처리의 최소 단위(0 또는 1)
- 바이트(Byte): 8개의 비트가 모인 단위. 문자를 표현하는 기본 단위이자 메모리 주소 지정의 기본 단위
- 워드(Word): CPU가 한 번에 처리할 수 있는 데이터의 크기(32비트 CPU는 4바이트, 64비트 CPU는 8바이트가 1워드)
논리 연산(Boolean Algebra)
섹션 제목: “논리 연산(Boolean Algebra)”2진 논리 체계로, 현대 컴퓨터 회로 설계의 기초가 된다.
| 연산 | 기호 | 설명 | 결과 예시 (A=1, B=0) |
|---|---|---|---|
| NOT | ~ | 입력된 비트를 반전시킴 (1의 보수 생성에 사용) | 0 |
| AND | & | 두 비트가 모두 1일 때만 1 반환 (비트 마스킹에 사용) | 0 |
| OR | | | 두 비트 중 하나라도 1이면 1 반환 (특정 비트 설정에 사용) | 1 |
| XOR | ^ | 두 비트가 서로 다를 때만 1 반환 (암호화, 두 값 교환에 사용) | 1 |
정수의 표현(Integer Representation)
섹션 제목: “정수의 표현(Integer Representation)”컴퓨터는 제한된 비트 수로 정수를 표현해야 하므로, 값의 범위와 부호 처리에 대한 명확한 규칙이 존재한다.
양의 정수(Unsigned Integer)
섹션 제목: “양의 정수(Unsigned Integer)”부호 없이 양수만을 표현하며, 모든 비트를 숫자의 크기를 나타내는 데 사용한다.
- 표현 범위(n비트): 0 ~ 2^n - 1
- 오버플로우(Overflow): 표현 가능한 최대값을 넘어설 경우 가장 작은 값으로 돌아가는 현상
음의 정수 표현 방식의 진화
섹션 제목: “음의 정수 표현 방식의 진화”음수를 표현하기 위해 최상위 비트(MSB, Most Significant Bit)를 부호 비트로 사용한다.(0: 양수, 1: 음수)
- 부호와 절대치(Sign-Magnitude): MSB만 부호로 쓰고 나머지는 절대값 표현
- 0이 +0과 -0 두 개로 존재하는 문제 발생
- 덧셈과 뺄셈 회로를 따로 설계해야 하는 비효율성
- 1의 보수(1’s Complement): 양수의 모든 비트를 반전
- 여전히 +0과 -0이 존재
- 연산 시 엔드 어라운드 캐리(End-around Carry) 처리가 필요하여 복잡함
- 2의 보수(2’s Complement): 1의 보수에 1을 더함
- 현재 모든 현대 컴퓨터가 사용하는 표준 방식
- 0이 하나만 존재하며, 덧셈 회로 하나로 뺄셈까지 처리 가능
2의 보수 변환 흐름
섹션 제목: “2의 보수 변환 흐름”flowchart LR Decimal[10진수 음수: -5] --> Binary[절대값 2진수: 0000 0101] Binary --> OneComp[1의 보수: 1111 1010] OneComp -->|Add 1| TwoComp[2의 보수: 1111 1011]실수의 표현(Floating Point Representation)
섹션 제목: “실수의 표현(Floating Point Representation)”실수는 정수와 달리 무한한 값을 가질 수 있어, 유한한 비트 내에서 표현하기 위해 정밀도를 포기하고 범위를 넓히는 방식을 택한다.
고정 소수점(Fixed Point)
섹션 제목: “고정 소수점(Fixed Point)”소수점의 위치를 미리 정해두고 표현하는 방식이다.
- 구현이 단순하고 연산 속도가 빠름
- 표현할 수 있는 수의 범위가 매우 좁아 범용 컴퓨터에서는 잘 사용되지 않음(임베디드 등 특수 목적 사용)
부동 소수점(Floating Point) - IEEE 754 표준
섹션 제목: “부동 소수점(Floating Point) - IEEE 754 표준”소수점의 위치가 고정되지 않고 떠다니는(Floating) 방식으로, 현재 대부분의 시스템은 IEEE 754 표준을 따른다.
| 구성 요소 | 역할 | 32비트(float) 할당 | 64비트(double) 할당 |
|---|---|---|---|
| 부호 비트(S) | 양수(0) / 음수(1) 결정 | 1 bit | 1 bit |
| 지수부(E) | 소수점의 위치 결정 (값의 범위) | 8 bits | 11 bits |
| 가수부(M) | 실제 유효 숫자 표현 (정밀도) | 23 bits | 52 bits |
숫자를 부호(Sign) * 가수(Mantissa) * 2^지수(Exponent) 형태로 저장하게 된다.
부동 소수점의 정밀도 문제
섹션 제목: “부동 소수점의 정밀도 문제”컴퓨터는 실수를 2진수로 근사하여 저장하기 때문에 미세한 오차가 발생한다.
- 0.1 + 0.2가 0.3이 되지 않는 현상 발생
- 금융 계산 등 정확성이 필수적인 분야에서는 float/double 대신
BigDecimal(Java 기준)과 같은 별도의 라이브러리나 정수형으로 변환하여 사용
텍스트의 표현(Text Representation)
섹션 제목: “텍스트의 표현(Text Representation)”문자를 숫자에 대응시키는 약속(Character Set)과 이를 비트로 저장하는 방식(Encoding)으로 나뉜다.
아스키 코드(ASCII)
섹션 제목: “아스키 코드(ASCII)”- 7비트를 사용하여 128개의 문자 표현 (영문 대소문자, 숫자, 특수기호, 제어 문자)
- 1바이트(8비트) 중 남는 1비트는 통신 에러 검출용 패리티 비트로 사용하기도 함
- 영미권 외의 문자를 표현할 수 없는 한계 존재
유니코드(Unicode)
섹션 제목: “유니코드(Unicode)”전 세계의 모든 문자를 일관되게 표현하고 다루기 위한 산업 표준이다.
인코딩 방식(UTF-8 vs UTF-16)
섹션 제목: “인코딩 방식(UTF-8 vs UTF-16)”유니코드 값을 컴퓨터에 실제로 저장하는 방식의 차이다.
- UTF-8
- 가변 길이 인코딩 방식 (문자에 따라 1~4바이트 사용)
- 영문/숫자는 1바이트(ASCII와 호환), 한글은 3바이트로 표현
- 웹 환경 및 대부분의 OS에서 표준으로 사용 (용량 효율이 좋음)
- UTF-16
- 대부분의 문자를 2바이트(일부는 4바이트)로 고정하여 표현
- 자바(Java)의 메모리 내 문자열 처리 방식(
char타입)이나 윈도우 API 등에서 사용 - 바이트 순서(Endianness)를 표시하는 BOM(Byte Order Mark)이 필요할 수 있음