[CS] 컴퓨터의 숫자와 단위

공부하는 감자·2024년 5월 29일
0

CS

목록 보기
1/3

시작하기 전

CPU 기초

  • 제일 중요한 것은 코어(Core) 개수
    • 연산을 수행하는 주체를 코어라고 한다.
  • Thread는 실행의 단위이다.
    • 코어가 6개고 쓰레드가 1000개면, 1000개의 일거리를 6개의 코어가 분담해서 처리한다.

1비트와 디지털

1bit와 2수 (다른 말로 디지털)

  • 1 비트란 ‘전기 스위치 1개’를 의미한다.
    • 비트는 소문자로 사용하며, 복수형으로 사용하지 않는다.
  • 전기가 흐르는 On 상태는 1
  • 전기가 흐르지 않는 Off 상태는 0
  • 2진수는 0과 1로 표현하는 수

4bit란

  • 스위치 4개를 조합해서 4bit라고 한다.
  • 조합은 242^4 이다.
  • 00000000 이란 2진수가 있으면, 각 자리수는 8, 4, 2, 1이다.

16진수

2진수는 인간이 이해하기에는 너무 어렵고, 숫자가 길어질 수 있다. 따라서, 컴퓨터의 데이터를 표현할 때 16진법도 많이 사용한다.

16진법은 수가 15을 넘어가는 시점에 자리 올림을 한다. 수학적 표기 방식으로는 아래첨자 16을 사용하고, 코드 상으로는 앞에 0x를 붙어 16진수라는 것을 표기한다.

U+라고 표기하기도 한다(유니코드에서 사용).

자리 올림을 쉽게 이해하는 법

0부터 9까지는 동일하게 세고, 10부터는 주먹을 쥔 상태로 이해를 한다.

  • 주먹을 쥔 상태: 10를 A로 표현
  • 손가락 하나를 편 상태: 11를 B로 표현
  • 손가락 두 개를 편 상태: 12를 C
  • 손가락 세 개를 편 상태: 13를 D로 표현
  • 손가락 네 개를 편 상태: 14를 E로 표현
  • 손가락을 모두 편 상태: 15를 F로 표현

2진수 → 16진수로 변환

16진수는 4비트이다. 242^4 는 16이므로.

10진수도 있는데 왜 16진수를 사용하느냐 하면, 그것은 16진수와 2진수 간의 변환이 간단하고 쉽기 때문이 아닌가 한다.

아무튼, 16진수는 4비트로 표현할 수 있으므로 2진수에서 16진수로 변환할 때는 각 숫자를 4비트로 표현하기만 하면 된다.

즉, 4비트를 16진수 하나라고 생각하면 된다.

16진수 → 2진수로 변환

4비트씩 떼어, 그것을 2진수로 표현한다. 즉, 4비트는 16진수 한 자리 숫자다.

C언어같은 데에서는 0xF4처럼 앞에 ‘0x’를 붙여주기도 한다.

16진수 표기가 사용되는 예

1. 색상 표현

  • 빛의 삼원색, RGB
  • RGB는 각 컬러가 8비트를 사용한다. 즉, 28=2562^8=256 (0~255)
  • CSS에서도 16진수로 색상을 표기한다.
    • #B7 1C 1C → 8비트가 3개니까 24bit 컬러가 된다.
    • 위에서 8비트를 더하면 32비트 트루 컬러가 된다.

2. 컴퓨터 하드웨어 주소 표현

  • 컴퓨터 내부의 어떤 정보들을 표현할 때, 주소같은 수치적인 표현들이 있을 때는 거의 16진수로 표기한다.
  • 예를 들어, 비주얼 스튜디오에서 C언어의 메모리의 내용을 조사할 때 메모리 윈도우라는 내용을 본다. 이 내용은 모두 16진수로 되어 있다.

3. 메모리 값 표현

  • 메모리 값은 정보.

정리

  • 컴퓨터에서 모든 정보는 디지털이다.
  • 디지털은 0과 1로 표현이 된다.
  • 4비트씩 묶으니 전부 16가지가 있어서 16진수로 표현한다.

외워야 할 단위 체계와 숫자

바이트

  • 8 비트를 하나로 묶어 1바이트(byte)라고 한다.
    • 1비트는 너무 작아서 용량으로는 잘 안치고, 1바이트부터 용량 얘기를 하기 시작한다.
  • 1바이트는 영문자 한 글자가 저장될 수 있는 메모리 크기이며, 관리의 최소단위이다.
    • 한글 한 글자를 저장하려면 2 바이트가 필요하다. (코드 체계에 따라 다르기도 하다)
    • 가장 작은 메모리의 단위가 1 바이트이다.
    • 즉, 메모리는 1바이트 단위로 관리한다.

정보 단위

비트 Bit

비트는 표현의 최소 수준이다.

컴퓨터는 0과 1만 이해할 수 있다. 전기가 흐르는 상태를 1로 따진다면, 전기가 흐르지 않는 상태를 0으로 표현하는 식이다.

비트는 컴퓨터가 이해하는, 0과 1을 표현하는 가장 작은 단위이다.

1비트로는 2가지의 정보(꺼짐과 켜짐)을 표현할 수 있다. 2비트로는 총 4개를, 3비트로는 8개의 정보를 표현할 수 있다.

즉, 비트 수가 n개라면 2n2^n 를 표현할 수 있다.

비트의 단위

용량을 말할 때는 바이트 단위

우리는 평소에 비트 단위로 말하지 않는다. 비트보다 큰 단위로 말하는데, 그것은 아래와 같다.

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

이런 단위를 1024개씩 묶은 단위는 kiB(키비바이트), GiB(기비 바이트)라고 한다.

일부 문서는 1024씩 묶은 단위가 표에 정리한 단위다, 라고 이야기하는데 실제로는 둘은 단위가 다르다.

과거에는 정보의 단위가 크지 않았으니 1000개씩 묶으나 1024개씩 묶으나 별 차이가 없어서 두 용어를 혼용해서 썼으나, 최근에는 다루는 정보의 크기가 커지면서 그 차이도 커지게 됐다.

따라서, 1000씩 묶은 단위와 1024개씩 묶은 단위를 구별해서 쓰는 추세이다.

워드 word

CPU가 한 번에 처리할 수 있는 정보의 크기 단위를 말한다. 예를 들어, 컴퓨터가 한 번에 32비트씩 다룰 수 있다면 1워드 크기는 32비트가 된다.

워드 단위의 파생 단위도 생겼는데, 아래와 같다.

  • 하프 워드 (half word): 워드의 절반 크기
  • 풀 워드 (full word): 워드 크기
  • 더블 워드 (double word): 워드의 두 배 크기

컴퓨터가 글자를 다루는 방법

컴퓨터는 0과 1만 이해할 수 있다. 그러므로, 우리 인간이 사용하는 문자를 컴퓨터에게 이해시키기 위해서는 0과 1로 표현해야 한다.

문자 집합 Charter set

문자 집합이란, 컴퓨터가 이해할 수 있는 문자의 모음이다. 우리가 컴퓨터가 이해할 수 있도록 문자 하나에 숫자 하나를 매칭하고, 이 숫자는 이런 문자라는 의미야 하고 약속한 것과 비슷하다.

이 문자 집합은 여러 개가 있을 수 있으며, 매칭한 숫자를 ‘코드 포인트’라고 한다.

  • 컴퓨터가 글자를 표현하기 위해 숫자와 글자를 매핑한다.
  • 이러한 규약을 ‘코드체계’라고 한다.

코드 체계의 예

  • 십진수 65 = 컴퓨터에겐 영문 대문자 ‘A’ = 16진수로는 0x41
  • ‘B’는 66, ‘C’는 67이 된다.

💡 문자 1과 숫자 1은 다르다!

ASCII 코드

  • American Standard Code for Information Interchange
  • 미국에서 사용하는 표준 코드체계
    • 회사 별로 만드는 컴퓨터마다 사용하는 코드체계가 다르면, 서로 표기할 때 깨지는 문제가 발생한다. 이를 위해 국가가 표준을 만든 것이다.

알파벳, 아라비아 문자, 몇 개의 특수문자, 제어문자를 포함한 문자 집합으로, 8비트를 사용한다.

당연히 128개밖에 표현을 못하므로, 영어 외의 다른 언어를 표현할 수가 없다. 그 외의 특수문자도 마찬가지다.

이 8비트 중에 1비트는 오류 검출을 위한 패리티 비트로 사용하기 때문에, 실질적으로 문자를 표현하는 데에 사용하는 비트는 7비트이다.

7비트로는 128개의 문자를 표현할 수 있다. A는 65, a는 97 등이 그 예다. 여기서 A는 문자, 65는 코드 포인트가 된다.

그래서 우리는 언어별 문자 집합을 만들었다.

KS X 1001와 KS X 1003

이 둘은 한국어를 표현하기 위해 만들어진 문자 집합이다. 이 문자집합를 인코딩하는 언어는 euc-kr 이다.

유니코드

그런데, 이렇게 국가별로 언어를 정의하면 호환성이 너무 복잡해진다. 예를 들어 한국어, 영어, 중국어, 일본어를 제공하는 웹 사이트를 만들고 싶으면 총 4개의 문자 집합과 인코딩을 사용해야 하는 것이다.

그래서 등장한 것이 바로 통합된 문자 집합, 유니코드이다. 유니코드는 전 세계의 문자를 모두 담아내려고 한 문자 집합이며, 문자 하나 당 16비트를 사용한다.

이 유니코드를 인코딩하기 위해 나온 것이 utf-8, utf-16 등 이다.

인코딩

이렇게 매칭된 숫자는 기본적으로 16진수로 표현되어 있다. 당연하게도 컴퓨터는 이 숫자를 이해하지 못한다. 이해하려면 0과 1로 바꿔줘야 한다.

인코딩은 이렇게 매칭된 코드 포인트를 컴퓨터가 이해할 수 있도록 변환하는 것을 말한다.

💡 16진수를 사용하는 이유는, 2진수와 12진수를 서로 변환하는 과정이 가장 간단하기 때문이다.

EUC-KR

한국어 문자 집합을 인코딩하기 위해 사용하는 인코딩 방식이다.

UTF

유니코드를 인코딩하기 위해 사용하는 인코딩 방식이다. 이 인코딩 방식은 여러 가지가 있다.

대표적인 예로 UTF-8이 있는데, 각 문자별로 가변적인 비트 수를 사용한다. 코드 포인트의 범위가 어디에 속하느냐에 따라 달라지는 것이다.

디코딩

인코딩이 컴퓨터가 이해할 수 있도록 0과 1로 바꾸는 것이라면, 디코딩은 역으로 인간이 이해할 수 있도록 변환하는 것을 말한다.

보통 디코딩은 잘 다루지 않는다.

바이너리

  • 숫자와 글자를 구별하지 않고 정보를 말할 때는 바이너리(Binary)라고 한다.
    • 컴퓨터 안에 모든 정보는 바이너리다. (2진수로 표현되니까)
    • 문자로 표현할 수 있으면 텍스트라고 부르기도 한다. (바이너리 안에 텍스트 포함)
    • 이진수로 나열해서 쭉 보는 정보를 바이너리라고 한다.
  • 엔터는 ‘0D 0A’ 이다.
    • Escape Sequence (\r\n)

위키백과에 따르면, 바이너리는 다음의 의미로도 쓰인다.

  • 바이너리는 0과 1, 두 숫자로만 이루어진 이진법을 의미한다.
  • 컴퓨터에서 정보는 이진 형태로 저장되며, 바이너리는 이진 파일(텍스트 형태가 아닌 이진 형태로 인코딩된 파일. 많이 쓰이진 않는다)을 의미한다.
  • 프로그램 배포에서 소스코드가 아닌 실행 파일을 나타낸다.
    출처: https://ko.wikipedia.org/wiki/바이너리

컴퓨터가 사진을 다루는 방법

픽셀

  • 모니터 화면 상 ‘점’ 하나를 화소(Pixel)이라 한다.
    • 화소가 작을 수록(=점이 작을 수록) 해상도가 높다고 한다.
    • 하나의 화소는 RGB를 포함한다.
  • 여러 점들을 모아 사진을 만들 수 있다.
    • 사진은 화소들의 집합체
  • 화소 하나를 표현하는데 8비트 16비트, 24비트, 32비트 정보가 필요할 수 있다.
    • 보통은 24비트로 표현한다.
    • RGB니까 각각 8비트씩
    • 투명도를 포함하여 32비트로 표현하기도 한다.

빛의 3원색

  • 빛의 3원색은 Red, Grean, Blue
  • 이 점에 착안해 RGB 컬러가 등장한다.
  • 화소가 작을 수록 사진이 매끄럽다. (고해상도)

투명도

  • 두 개의 픽셀이 겹쳐 있을 때, 앞에 나와있는 화소가 어느 정도의 투명도를 갖느냐에 따라서 겹친 지역이 다르게 렌더링 된다.
    • 여기서 렌더링은 화면에 표시해준다를 고급스럽게 표현한거라고 이해하고 넘어가자.
  • 투명도를 결정하는 걸 다른 말로 알파 채널이라고 한다.
  • 알파 채널을 포함하여 RGBA라고도 이야기를 한다.
    • 32비트 트루 컬러

RGB 색상 표현과 픽셀

  • 수직수평 해상도가 각각 가로 1024, 세로 768의 이미지가 있을 때, 화소가 4바이트(32비트)면 4*768KB정도 된다.
    • 대략 2.8MB 가량
  • RGB다, RGBA다를 명시해서 모든 컬러셋의 집합체를 비트맵이라고 한다.
    • 비트맵 파일은 각 화소별로 RGB값 32비트 비트맵일 때 걔가 어떤 값이에요라고 쓴 것이다.
  • 각 픽셀의 정보를 일일이 다 나열한 것이 로우 비트맵
  • 실제로 비트맵을 통째로 쓰는 경우는 없다.
    • 보통 JPG 등으로 압축해서 쓴다.

비트맵(Bitmap) 이란?

비트맵은 디지털 이미지를 저장하는 방식 중 하나입니다.

각 픽셀(화소)의 정보를 비트(0과 1) 단위로 저장하기 때문에 비트맵이라고 불립니다.

비트맵 이미지는 사진처럼 실제 이미지를 표현하는 데 적합하며, .bmp, .jpg, .png 등 다양한 파일 형식으로 저장됩니다.

비트맵을 .jpg로 저장할 수 있다는 것은 비트맵 이미지를 JPG 형식으로 변환할 수 있다는 의미이지, 비트맵 자체가 JPG라는 의미는 아닙니다. 비트맵과 JPG는 서로 다른 이미지 저장 방식입니다.

비트맵 이미지의 특징:

  • 픽셀 기반: 이미지를 구성하는 각 픽셀의 색상 정보를 저장합니다.
  • 높은 해상도: 사진처럼 실제 이미지를 표현하는 데 적합합니다.
  • 용량: 이미지 크기와 해상도에 따라 용량이 커질 수 있습니다.
  • 확대: 이미지를 확대하면 픽셀이 보이고 화질이 저하될 수 있습니다.

비트맵 이미지의 장점:

  • 실제 이미지를 사실적으로 표현할 수 있습니다.
  • 다양한 색상을 표현할 수 있습니다.
  • 사진 편집 프로그램에서 쉽게 편집할 수 있습니다.

비트맵 이미지의 단점:

  • 용량이 커질 수 있습니다.
  • 이미지를 확대하면 화질이 저하될 수 있습니다.
  • 벡터 이미지에 비해 편집 기능이 제한적일 수 있습니다.

비트맵 이미지의 활용:

  • 사진
  • 그림
  • 로고
  • 아이콘
  • 웹 이미지

비트맵 이미지는 다양한 분야에서 활용되고 있습니다. 사진 촬영, 그림 그리기, 웹 디자인 등 다양한 작업에 비트맵 이미지를 사용할 수 있습니다.


Reference

넓고 얕게 외워서 컴공 전공자 되기 | 널널한 개발자 - 인프런

[컴퓨터 공학 기초 강의]『혼자 공부하는 컴퓨터 구조+운영체제』

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글