한 권으로 읽는 컴퓨터 구조와 프로그래밍 (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.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 - 가수

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가 있음.