Internal Language System
컴퓨터 언어의 기본 단위
Section titled “컴퓨터 언어의 기본 단위”컴퓨터는 전기의 켜짐(ON)과 꺼짐(OFF)이라는 두 가지 상태만을 인식할 수 있으며, 이를 수학적으로 추상화한 것이 비트다.
- 비트(Bit): Binary Digit의 약자. 정보 처리의 최소 단위(0 또는 1)
- 바이트(Byte): 8개의 비트가 모인 단위. 문자를 표현하는 기본 단위이자 메모리 주소 지정의 기본 단위
- 워드(Word): CPU가 한 번에 처리할 수 있는 데이터의 크기(32비트 CPU는 4바이트, 64비트 CPU는 8바이트가 1워드)
논리 연산(Boolean Algebra)
Section titled “논리 연산(Boolean Algebra)”2진 논리 체계로, 현대 컴퓨터 회로 설계의 기초가 된다.
| 연산 | 기호 | 설명 | 결과 예시 (A=1, B=0) |
|---|---|---|---|
| NOT | ~ | 입력된 비트를 반전시킴 (1의 보수 생성에 사용) | 0 |
| AND | & | 두 비트가 모두 1일 때만 1 반환 (비트 마스킹에 사용) | 0 |
| OR | | | 두 비트 중 하나라도 1이면 1 반환 (특정 비트 설정에 사용) | 1 |
| XOR | ^ | 두 비트가 서로 다를 때만 1 반환 (암호화, 두 값 교환에 사용) | 1 |
정수의 표현(Integer Representation)
Section titled “정수의 표현(Integer Representation)”컴퓨터는 제한된 비트 수로 정수를 표현해야 하므로, 값의 범위와 부호 처리에 대한 명확한 규칙이 존재한다.
양의 정수(Unsigned Integer)
Section titled “양의 정수(Unsigned Integer)”부호 없이 양수만을 표현하며, 모든 비트를 숫자의 크기를 나타내는 데 사용한다.
- 표현 범위(n비트): 0 ~ 2^n - 1
- 오버플로우(Overflow): 표현 가능한 최대값을 넘어설 경우 가장 작은 값으로 돌아가는 현상
음의 정수 표현 방식의 진화
Section titled “음의 정수 표현 방식의 진화”음수를 표현하기 위해 최상위 비트(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의 보수 변환 흐름
Section titled “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)
Section titled “실수의 표현(Floating Point Representation)”실수는 정수와 달리 무한한 값을 가질 수 있어, 유한한 비트 내에서 표현하기 위해 정밀도를 포기하고 범위를 넓히는 방식을 택한다.
고정 소수점(Fixed Point)
Section titled “고정 소수점(Fixed Point)”소수점의 위치를 미리 정해두고 표현하는 방식이다.
- 구현이 단순하고 연산 속도가 빠름
- 표현할 수 있는 수의 범위가 매우 좁아 범용 컴퓨터에서는 잘 사용되지 않음(임베디드 등 특수 목적 사용)
부동 소수점(Floating Point) - IEEE 754 표준
Section titled “부동 소수점(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) 형태로 저장하게 된다.
부동 소수점의 정밀도 문제
Section titled “부동 소수점의 정밀도 문제”컴퓨터는 실수를 2진수로 근사하여 저장하기 때문에 미세한 오차가 발생한다.
- 0.1 + 0.2가 0.3이 되지 않는 현상 발생
- 금융 계산 등 정확성이 필수적인 분야에서는 float/double 대신
BigDecimal(Java 기준)과 같은 별도의 라이브러리나 정수형으로 변환하여 사용
텍스트의 표현(Text Representation)
Section titled “텍스트의 표현(Text Representation)”문자를 숫자에 대응시키는 약속(Character Set)과 이를 비트로 저장하는 방식(Encoding)으로 나뉜다.
아스키 코드(ASCII)
Section titled “아스키 코드(ASCII)”- 7비트를 사용하여 128개의 문자 표현 (영문 대소문자, 숫자, 특수기호, 제어 문자)
- 1바이트(8비트) 중 남는 1비트는 통신 에러 검출용 패리티 비트로 사용하기도 함
- 영미권 외의 문자를 표현할 수 없는 한계 존재
유니코드(Unicode)
Section titled “유니코드(Unicode)”전 세계의 모든 문자를 일관되게 표현하고 다루기 위한 산업 표준이다.
인코딩 방식(UTF-8 vs UTF-16)
Section titled “인코딩 방식(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)이 필요할 수 있음