한 권으로 읽는 컴퓨터 구조와 프로그래밍 (Jonathan E. Steinhart 저, 책만 사) 를 읽고 정리하는 요약 글입니다.
1장 - 컴퓨터 언어 체계
1.0. 컴퓨터의 언어
- 언어는 정보의 소통을 하기 위한 매개체
- 언어를 사용하기 위해서는 2가지가 필요함
- 인코딩: 어떠한 기호의 집합으로 변환, 기록되어야 함.
- 문맥: 의사소통의 당사자들이
1.1. 2진법 체계
1.1.1. 비트
- 비트(bit) 2진법을 사용하는 체계
- 참/거짓 (또는 다른 형식의 표현)을 기반으로 하는 비트를 사용하여 논리연산을 할 수 있음
1.1.2. 불리언 대수 (Boolean algebra)
- 비트에 대한 연산 규칙들의 집합
- 불리언 연산자 (Boolean operators)
- NOT : 논리적 반대
- AND : 논리곱. 둘 다 참인 경우에만 참 (또는 둘 다 거짓인 경우에만 거짓)
- OR : 논리합. 둘 중 하나 이상이 참인 경우에만 참 (둘 중 하나라도 거짓인 경우 거짓)
- XOR : 배타적논리합. 두개의 bit값이 서로 다를 경우에만 참. 서로 같을 경우에는 거짓
- 드모르간의 법칙
- a AND b = NOT( NOT a OR NOT b)
- 긍정적 논리(정논리)를 부정적 논리(부논리)로 변환하여 연산할 수 있게 됨.
1.2. 정수의 표현
1.2.1. 10진수의 표현
- 0~9 의 10가지 숫자를 사용하여 표현
- 1603의 10진수 표현
- \(1 \times 10^3 + 6 \times 10^2 + 0 \times 10^1 + 3 \times 10^0\)
1.2.2. 2진수의 표현
- 비트를 사용하여 표현. 단, 1과 0 두가지 기호 밖에 사용할 수 없음.
- 1603의 2진수 표현
- \(1 \times 2^{10} + 1 \times 2^9 + 0 \times 2^8 + 0 \times 2^7 + 1 \times 2^6 + 0 \times 2^5 + 0 \times 2^4 + 0 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0\)
- \(1024 + 512 + 64 + 2 + 1\)
- 즉, 11001000011 로 표현될 수 있음.
- \(1 \times 2^{10} + 1 \times 2^9 + 0 \times 2^8 + 0 \times 2^7 + 1 \times 2^6 + 0 \times 2^5 + 0 \times 2^4 + 0 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0\)
1.2.3. 2진수의 덧셈
- 2진수의 덧셈에서 사용할 비트의 개수를 벗어날 때를 오버플로(overflow)라고 함.
- 상태 코드 레지스터(condition code register)에 오버플로 비트를 정보를 담아둠.
1.2.4. 음수의 표현
- 음수를 표현하기 위한 방법으로 부호를 사용하는 것이 있음.
- 가장 왼쪽 비트 (MSB)를 부호를 표현하기 위한 비트로 사용하는 것.
- 하지만, XOR과 AND를 사용한 덧셈 연산을 수행할 수 없음.
- 음수를 표현하기 위한 방법으로 보수(one’s coomplement)가 있음.
- 양수의 모든 비트를 반대로 뒤집는 방법.
- 단, 순환올림의 상황에서 하드웨어의 추가가 필요하기에 비용이 발생함.
- 부호, 보수의 단점을 해결하는 음수 표현의 방식으로 2의 보수 표현법이 있음.
- 비트를 모두 뒤집고, 1을 추가하는 방법.
1.3. 실수의 표현
- 실수에는 소수점이 포함됨
- 고정소수점 표현법
- 소수점의 위치를 정해놓고 표현하는 방법
- 특수 목적을 위해서 사용되고 있으나, 범용 컴퓨팅에서는 사용되고 있지 않음.
- 부동소수점 표현법 (IEEE)
- IEEE 표준에서 제안하는 부동소수점 방식
- 1bit - 부호
- 8bit - 지수
- 23bit - 가수
- IEEE 표준에서 제안하는 부동소수점 방식
1.4. 텍스트의 표현
1.4.1. 아스키 코드 (ASCII)
- 키보드에 있는 모든 값에 대해서 7비트의 수를 할당한 체계
- ASCII 코드 테이블
- 알파벳 이외에 장치를 제어하기 위해 사용되는 제어문자가 포함됨.
- 알파벳 뿐만 아니라 다른 언어를 지원하기 위한 표준들도 생김.
- ISO-646, ISO-8859, KSC5601 등등
1.4.2. Unicode
- 문자에 16비트를 부여한 체계
1.4.3. UTF-8 (유니코드 변환 형식 8비트)
- 호환성과 효율성을 고려해 8비트만으로 문자를 표현할 수 있도록 Unicode를 인코딩하는 방식
- ASCII 문자의 변환 때에도 추가의 공간이 필요로 하지 않음
- ASCII기호에 해당하지 않는 기호나 문자의 경우에는 UTF-8 덩어리를 복수개를 사용하여 표현 함.
1.6. 색의 표현
- 대표적으로 적, 녹, 청을 섞은 RGB가 있으며, 이 조합으로 가지고 컬러큐브를 표현할 수 있음.
- 색을 표현할 때 #rrggbb의 형식으로 표현하며, 각 색상은 16진법으로 표현함.
- 투명도를 가미한 색표현을 RGBa가 있음.