ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터가 데이터를 표현하고 이해하는 방식
    기타 2023. 4. 7. 18:55

    0과 1로 숫자를 표현하는 방법

    정보단위

    컴퓨터는 0과 1밖에 이해하지 못한다. 즉 이진수만 이해한다.

    • 비트(bit) : 0과 1을 나타내는 가장 작은 정보단위

      • 비트는 이진수의 자리수?
      • 1비트는 2진수로 1의 자리수까지 표현 가능 -> 0b0과 0b1 21가지
      • 2비트는 2진수로 2의 자리수까지 표현 가능 -> 0b00 ~ 0b11 22가지
      • 3비트는 2진수로 4의 자리수까지 표현 가능 -> 0b000 ~ 0b111 23가지
      • 즉, n비트는 2n가지 정보를 표현할 수 있다.
    • 정보단위 변환

    1 바이트(byte) 8 비트(bit)
    1 킬로바이트(kB) 1,000 바이트(byte)
    1 메가바이트(MB) 1,000 킬로바이트(kB)
    1 기가바이트(GB) 1,000 메가바이트(MB)
    1 테라바이트(TB) 1,000 기가바이트(GB)

    note : 1024 단위로 치환 하는 것은 잘못된 관습이다. 이전 단위를 1024개 묶어 표현한 단위는 KiB, MiB, GiB, TiB로 표현한다.

    워드(word)
    중요한 정보 단위 중 워드라는 단위가 있다. 워드란 CPU가 한번에 처리할 수 있는 데이터 크기를 의미한다. 만약 CPU가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트가 된다. 이렇게 정의된 워드의 절반 크기를 하프 워드, 1배 크기를 풀 워드, 2배 크기를 더블 워드라고 부른다. 그렇다면 32비트 CPU의 풀 워드는 64비트 CPU의 하프 워드와 같고, 64비트 CPU의 하프워드는 16비트 CPU의 더블 워드와 같다.

    이진법

    • 코드상에서 이진법을 표현할 때 이진수 앞에 0b를 붙인다.
    • 컴퓨터는 0과 1밖에 이해할 수 없기 때문에, 2의 보수 표현법을 사용한다.
    • 이진수를 음수로 표현할 때는 2의 보수(complement)를 구해 음수로 간주한다.
    • 2의 보수의 사전적 의미는 '어떤 수를 그보다 큰 2n에서 뺀 값'을 의미한다.
    • 예를 들어 0b11의 2의 보수는 0b11보다 큰 2n, 즉 0b100에서 0b11을 뺀 0b01이 된다.
    • 2의 보수를 쉽게 표현하는 방법은, 모든 0과 1을 뒤집고 거기에 1을 더한 값으로 이해하면 된다.
    예시 : 0b1011을 음수로 표현하기
    모든 0과 1 뒤집기 0100
    1 더하기 0101
    0b1011을 음수로 표현한 값 0b0101
    • 그런데 -1011을 표현하기 위한 음수로서의 0101과 십진수 5를 표현하기 위한 양수로서의 0101은 똑같이 생겼기 때문에 이것만으로는 컴퓨터가 부호를 구분할 수 없다. 따라서 컴퓨터 내부에서는 어떤 수를 다룰때는 양수인지 음수인지를 구분하기 위해 플래그를 사용한다.

    • 2의 보수 표현에도 한계가 있다. 0이나 2n 형태의 이진수에 2의 보수를 취하면 원하는 음수 값을 얻을 수 없다.

      • 0 : 4bit를 가정하고, 0을 음수로 표현하면 0b10000이다. 하지만 자리 올림이 발생한 비트의 1을 버리기 때문에 2의 보수 표현으로는 0이 한 가지만 존재하므로 2의 보수 표현에서 0은 -0, +0 두 가지가 아닌 한 가지만 존재하게 된다.(이러한 이유로 2의 보수 표현법을 쓴다고 한다.)
      • 2n : 하지만, 2n의 보수를 취하면 자기 자신이 되어버리는 문제가 발생한다. 23(0b1000)을 음수로 표현하면 자기 자신이 된다.(1000 -> 0111 -> 0111 + 1 = 1000) 즉, n비트로는 -2n과 2n을 동시에 표현할 수 없다. 0과는 반대의 문제가 생기는 것이다.
    예제 : 8 - 6
    10진수 8 - 6
    2진수 변환 1000 - 0110
    2의 보수 표현 반영 1000 + 1010
    2진수 덧셈 결과 10010
    제일 왼쪽 비트에서 자리 올림이 발생한 경우는 계산한 답이 양수라는 뜻이다.
    올림 자리수를 없앤다
    0010
    10진수 2
    예제 : 6 - 8
    10진수 6 - 8
    2진수 변환 0110 - 1000
    2의 보수 표현 반영 0110 + 1000
    2진수 덧셈 결과 1110
    자리올림이 발생하지 않았다면 계산한 답이 음수라는 뜻이다.
    2의 보수 표현으로 바꾼다
    0010
    10진수 -2

    십육진법

    • 십육진수는 숫자 앞에 0x를 붙여 구분한다.
    • 십육진수는 한 글자로 열여섯 종류(0~9, A~F)의 정보를 표현할 수 있다.
    • 십육진법을 사용하는 주된 이유 중 하나는 이진수를 십육진수로, 십육진수를 이진수로 변환하기 쉽기 때문이다.
    • 십육진수를 이진수로 변환하는 간편한 방법 중 하나는 십육진수 한 글자를 4비트의 이진수로 간주하는 것이다.
      • 십육진수 숫자 하나를 이진수로 표현하려면 4비트가 필요하기 때문이다.
    예제 : 0x1A2B을 이진수로 변환
    0x1 0b0001
    0xA 0b1010
    0x2 0b0010
    0xB 0b1011
    0x1A2B 0b0001101000101011
    예제 : 0b11010101을 십육진수로 변환
    0b1101 0xD
    0b0101 0x5
    0b11010101 0xD5

    0과 1로 문자를 표현하는 방법

    문자 집합과 인코딩

    • 문자집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
    • 인코딩 : 문자집합에 속한 문자를 0과 1로 변환하는 과정. 그 결과 값이 문자 코드가 된다.
    • 디코딩 : 인코딩의 반대. 즉, 0과 1로 이루어진 문자 코드를 문자로 변환하는 과정.

    아스키 코드(ASCII : American Standard Code for Information Interchange)

    • 아스키 문자 집합에 속한 문자들은 각각 7비트로 표현되는데, 7비트로 표현할 수 있는 정보의 가짓수는 27개로, 총 128개의 문자를 표현할 수 있다.
    • 실제로는 하나의 아스키 문자를 나타내기 위해 1바이트를 사용한다. 하지만 그 중 1비트는 패리티 비트(parity bit)라고 불리는 오류검출을 위해 사용되는 비트이기 때문에 실질적으로 문자 표현을 위해 사용되는 비트는 7비트라고 한다.
    • 코드 포인트 : 문자 인코딩에서 '글자에 부여된 고유한 값'을 코드포인트라고 한다. 가령, 아스키 문자 A의 코드포인트는 65(10진수)이다.
    • 약어의 의미 그대로 미국 표준이다. 그래서 한글을 표현하지 못한다.

    EUC-KR

    • 한글을 0과 1로 표현할 수 있는 고유한 문자 집합과 인코딩 방식이 필요하다고 느껴 만들어진 인코딩 방식.
    • 한글 인코딩에는 완성형과 조합형이 존재하는데, EUC-KR은 완성형 인코딩 방식이다.
    • EUC-KR로 인코딩된 한글 한 글자를 표현하려면 16비트가 필요하다. 그리고 16비트는 네 자리 십육진수로 표현 가능하다. 즉, EUC-KR로 인코딩된 한글은 네 자리 십육진수로 나타낼 수 있다.
    • EUC-KR 인코딩 방식은 총 2,350개의 한글을 표현할 수 있지만 모든 한글 조합을 표현할 수 없었다.
    • 이러한 문제를 해결 하기 위해 마이크로소프트의 CP949(Code Page 949)인데, 이 또한 한글 전체를 표현할 수 없었다.

    유니코드와 UTF-8

    • 다국어를 지원하는 프로그램을 만들 때 각 나라 언어의 인코딩을 모두 알아야하는 번거로움이 있다. 그런데 만약, 모든 나라 언어의 문자 집합과 인코딩 방식이 통일되어 있다면 언어별로 인코딩하는 수고로움을 덜 수 있다.
    • 그래서 유니코드가 등장했다.
    • 유니코드는 대부분 나라의 문자, 특수문자, 화살표나 이모티콘까지도 코드로 표현할 수 있는 통일된 문자집합이다.
    • 앞의 아스키코드, EUC-KR는 코드포인트가 인코딩 값이었다면, 유니코드는 코드포인트를 다양한 방법으로 인코딩한다.
    • 이러한 인코딩 방법에는 크게 UTF-8, UTF-16, UTF-32 등이 있다.

    출처 \
    - 혼자 공부하는 컴퓨터 구조 + 운영체제 \
    - 인프런 저자 직강

    '기타' 카테고리의 다른 글

    컴퓨터 구조의 큰 그림  (0) 2023.04.06
    TTS  (0) 2022.12.22
    speech-text-synchronize  (0) 2022.12.22
    [MAC] 캡스락 대문자 기능 끄기 by. Karabiner-Elements, BTT  (0) 2022.10.05

    댓글