본문 바로가기
Books/한 권 컴퓨터 구조와 프로그래밍 ✔️

[한 권 컴퓨터 구조와 프로그래밍] 1장 - 컴퓨터 내부의 언어 체계

by Aaron-Kim 2022. 7. 11.

컴퓨터는 어떤 말을 사용할까

언어란 무엇인가

  - 모든 언어의 뜻은 기호의 집합으로 인코딩(encoding)

  - 원활한 의사소통을 위해 당사자들이 모두 같은 문맥(context)를 공유해서

    같은 기호에 같은 뜻을 부여해야 함

문자 언어

  - 문자 언어는 기호를 나열한 것

  - 언어마다 기호와 기호 유형이 달라질 수 있음

  - 언어마다 순서도 다를 수 있음

  - 서체에 따라 기호를 구분하지는 않음

  - 문자 언어의 틀

    - 기호가 들어갈 상자

    - 상자에 들어갈 기호

    - 상자의 순서

비트

  - 자연어에서 상자를 문자(character), 컴퓨터에서는 비트(bit)라고 부름

  - 비트: binary (2진법) + digit (숫자)

    - 비트를 사용하면 적은 비용으로 편리하기 기호를 담을 수 있음

    - 2진법: 두 가지 부분으로 이뤄진 어떤 대상

    - 숫자: 10진수를 표현하는 10가지 기호 (0~9)

  - 컴퓨팅 (컴퓨터를 사용한 계산)을 통해 비트에 의미를 부여

논리 연산

  - 불리언 대수

  - 논리 연산: 다른 비트들이 표현하는 내용으로부터 새로운 비트를 만들어내는 동작

  - 불리언 대수: 비트에 대해 사용할 수 있는 연산 규칙의 집합

  - 기본 불리언 연산자

    - NOT: 논리적 반대, 입력의 상태를 반대로 반전시키기만 함

    - AND: 둘 이상의 비트에 작용, 두 입력이 모두 참일 때만 참을 돌려줌

    - OR: 둘 이상의 비트에 작용

  - 합성 불리언 연산자

    - XOR: exclusive OR, 첫 번째 비트와 두 번째 비트가 다른 값인 경우에만 참이 됨

  - 드모르간의 법칙

  - a AND b 연산 === NOT (NOT a OR NOT b)

  - NOT 연산을 충분히 사용하면 AND 연산은 OR 연산으로 혹은 그 반대로 대신 가능

  - 긍정 논리(정 논리)에 더해 부정 논리(부 논리)를 기술하는 명제 사용 시 활용 가능

  - 연산을 최소로 사용하면 비용도 최소화 가능

정수를 비트로 표현하는 방법

  - 양의 정수 표현

    - 10진수 체계에서는 10가지 기호인 숫자를 상자에 담을 수 있음

      - 밑이 10인 시스템

    - 비트를 사용하면 각 상자의 자릿수는 2의 거듭제곱

      - 2진수 체계는 2를 밑으로 하는 수 체계

      - 비트의 개수가 표현할 수 있는 값의 범위 결정

    - 2진수에서 가장 오른쪽의 비트를 LSB (Least Significant Bit) 가장 작은 유효 비트라고 부르고,

       가장 왼쪽 비트를 MSB (Most Signficant Bit) 가장 큰 유효 비트라고 부름

    - 가장 왼쪽에 있는 상자보다 더 왼쪽에 0을 추가하는 것을 leading zero라고 부름

  - 2진수 덧셈

    - 덧셈 결과가 우리가 사용할 비트의 개수로 표현할 수 있는 범위 넘어서면 오버플로 발생

    - MSB 위쪽에서 1을 빌려오는 경우 언더플로 발생

    - 컴퓨터에는 조건 코드 (상태 코드) 레지스터가 오버플로/언더플로 비트 같은 정보 담아둠

  - 음수 표현

    - 부호와 크기

      - 음수와 양수를 구분하기 위해 부호(sign) 사용

      - MSB를 부호에 사용하기로 결정함

        - 부호 비트가 0이면 양수, 1이면 음수로 취급

      - 부호와 크기(sign and magnitude) 표현법

        - 한 비트를 부호에 사용하고 나머지 비트를 수의 크기로 사용하는 방법

        - 문제점

          - 0을 표현하는 방법이 2가지인 것에 대한 비용 낭비의 문제점

          - XOR과 AND를 통한 덧셈 계산 사용 불가

    - 1의 보수

      - 1의 보수(one's complement) 표현법

        - 양수의 모든 비트를 뒤집는 방법

        - 문제점

          - 0을 두 가지 방식으로 표현하는 문제

          - MSB에서 올림 발생 경우 LSB로 전달해야 하는 순환 올림 방식 -> 복잡 (하드웨어 추가 필요)

    - 2의 보수

      - 4비트에서 -1을 표현하는 비트 패턴 => 1111

      - 2의 보수 표현법

        - 어떤 수의 비트를 뒤집고 1을 추가하면 음수를 얻을 수 있음

실수를 표현하는 방법

  - 고정소수점 표현법

    - 소수점의 위치가 항상 일정

    - 쓸모 있는 범위의 실숫값을 표현하기 위해 필요한 비트 개수가 너무 많은 문제

  - 부동소수점 표현법

  - 부동 소수점 표현법  

    - 가수 부분은 2진 소수, 지수 부분은 2의 거듭제곱 횟수를 표현

    - 지수와 가수를 분리함으로써 수를 표현할 때 필요한 0을 모두 저장하지 않고도 큰 수나 작은 수 표현 가능

    - 문제점

      - 비트 조합 낭비 많음

      - 비트 패턴이 가능한 모든 수 표현 불가

  - IEEE 부동소수점 수 표준

    - 컴퓨터에서 계산을 수행할 때 실수를 표현하는 표준 방법

      - 가수와 지수에 대해 각각 부호 비트 사용

      - 지수에 대한 부호 비트는 지수의 비트 패턴에 감춰져 있음

      - 낭비되는 비트 조합을 최소화하고 반올림을 쉽게 하기 위한 여러 가지 트릭이 사용됨

        - 정규화

          - 똑같은 비트를 사용하더라도 정밀도 더 높이고 싶음

          - 가수를 조정해서 맨 앞에 0이 없게 만듦 (지수도 조정 필요)

        - 가수의 맨 왼쪽 비트가 1이라는 사실을 알고 있으므로 생략 (가수에 1비트 더 사용 가능)

    - 기본 정밀도 부동소수점 수 (단정도 실수)

      - 32비트 사용, 7비트 정밀도

    - 2배 정밀도 부동소수점 수 (배정도 실수)

      - 64비트 사용, 15비트 정밀도

2진 코드화한 10진수 시스템

  - BCD (Binary-Coded Decimal)

    - 2진 코드화한 10진수

      - 4비트를 사용해 10진 숫자 하나 표현

    - 디스플레이나 가속도 센서 등에 활용

    - 비트 낭비 문제 발생

2진수를 다루는 쉬운 방법

  - 8진 표현법

    - Octal Representation

    - 2진수 비트들을 3개씩 그룹으로 묶기

  - 16진 표현법

    - Hexa Representation

    - 2진수 비트들을 4개씩 그룹으로 묶기

  - 프로그래밍 언어의 진법 표기법

    - 0으로 시작하는 숫자는 8진 숫자

    - 1~9사이 숫자로 시작하는 숫자는 10진수

    - 0x가 앞에 붙은 숫자는 16진수

    - (참고) 0b - 2진수 (C++)

비트 그룹의 이름

  - 4비트 덩어리 -> 1니블

  - 8비트 덩어리 -> 1바이트

  - 32비트 덩어리 -> 1워드

텍스트 표현

  - 아스키 코드

    - 정보 교환을 위한 미국 표준 코드

    - 모든 기호에 대해 7비트 수 값 할당

    - ex) A는 65

  - 다른 표준의 진화

    - 비트 가격이 떨어짐에 따라 유니코드라는 새로운 표준이 만들어짐

      - 문자에 16비트 코드 부여

      - 이후 21비트까지 확장됨

  - 유니코드 변환 형식 8비트

    - 컴퓨터는 7비트값을 처리하도록 설계되지 않아서 8비트를 사용해 아스키 문자를 저장함

    - 인코딩

      - 다른 비트 패턴을 표현하기 위해 사용하는 비트 패턴

    - UTF (Unicode-Transformation-Format)

      - UTF-8

        - 모든 아스키 문자를 8비트로 표현하여 아스키 데이터를 인코딩할 때는 추가 공간 필요 없음

        - 문자를 8비트 덩어리(Octet)의 시퀀스로 인코딩함

문자를 사용한 수 표현

  - 출력 가능하게 변경한 인코딩

    - 아스키 코드에서 제어 문자가 아닌 문자로 변경한 인코딩

    - 8비트 데이터를 7비트 데이터만 지원하는 통신 경로를 통해 송수신하기 위한 인코딩 방법

  - 베이스64 인코딩

    - 3바이트의 데이터를 4문자로 표현

      - 6비트 덩어리로 나눠서 각각에 출력 가능한 문자 할당해서 표현

    - 모든 3바이트 조합을 4바이트 조합으로 표현 가능

    - 패딩이라는 문자를 도입

    - 전자우편 첨부파일 전송에 많이 사용됨

  - URL 인코딩

    - 퍼센트 인코딩

색을 표현하는 방법

  - 투명도 추가

    - 이미지 합성은 색값을 알파로 곱하는 과정을 통해 이뤄짐

  - 색 인코딩

    - 웹에서는 16진 트리플렛으로 표현

정리

  - 단순한 비트를 사용해 아주 큰 숫자나 문자, 색 등의 복잡한 요소를 표현

  - 10진수 -> 2진수 표현, 2진수를 사용한 사칙 연산, 음수와 분수 표현 방법

  - 비트를 사용하여 문자를 인코딩하는 여러 가지 표준

반응형

댓글