> - 아날로그 데이터와 디지털 데이터 구별 > - 각 데이터 표현 방법 <br> ## Data in Computer - Data = unstructured and lack context VS **Information** = organized and processed - 현실 세계의 데이터는 연속적이고 무한한 반면, 컴퓨터 데이터는 이산적이고 유한함 → 그래서 컴퓨터에서 아날로그 데이터를 활용하기 위해 데이터를 디지털화 함 (연속적인 데이터를 분리된 데이터로 변환하는 과정에서 데이터 손실이 발생함) - 컴퓨터에서 수, 글자, 음성, 이미지, 비디오 등 다양한 모든 데이터는 이진수로 저장됨 - 컴퓨터 아키텍쳐에서 한번에 이동하는 단위는 주로 2의 제곱수임 (8, 16, 32 비트) <br> ## 숫자 데이터(수치 자료) 표현 이진수는 일종의 수 체계이므로 숫자 데이터를 binary code로 저장하는 건 쉬움 그러나 **음수**는 다름 ### 음의 정수 데이터 표현법 ✨ - **수의 부호-크기 표현 (Signed-magnitude representation)** - 부호를 통해 순서 혹은 방향을 나타냄 - 문제점 : 0의 경우 두가지 표현이 존재함 → 연산이 복잡해짐 - **Fixed-Sized Numbers (고정된 자릿수의 수)** - 고정된 숫자의 반은 음수를 표현하는 데 사용 e.g. 만약 최대 두 자리의 십진수만을 표현할 수 있다면, 1부터 49까지는 양의 정수 1부터 49, 그리고 50부터 99까지는 음수 -50부터 -1까지로 정하면 됨 (십의 보수) `A - B = A + (-B)` ![|w80|center](Fixed-Sized_Number.png)![|w80|center](Fixed-Sized_Number2.png) - **2의 보수법(Two's complement)** - 수를 8비트로 표현한다면 부호가 1비트, 7비트가 수에 쓰임 그중에서도 **가장 왼쪽에 있는 digit**이 부호를 결정하는 데에 쓰임 (1이면 마이너스를 뜻함) e.g. 10진수 126 = 8진수 176 = 2진수 1111110 - 쉬운 계산법 : 2의 보수에 not 연산 후 1 더하기 ![|w50|center](Two's_complement.png)![|w50|center](Two's_complement2.png) ##### 오버플로우 (Number Overflow) = 표현하려고 하는 수를 할당된 크기의 비트 수로는 표현할 수 없을 때 발생하는 현상 ![|w80|center](overflow.png) ### 실수 데이터 표현법 - ==**부동 소수점(floating point)**== 표현 방식 - 실수 값을 하나의 정수로 저장하되, 소수점(radix point)의 위치에 대한 정보를 함께 저장함 = sign(음과 양의 부호) + mantisa(가수부) + exponent(어디에 소수점 넣을지를 결정하는 지수) - e.g. (부호) X (가수부) X 10^N(지수) / 148.69 = 14869 X 10^-2 - e.g. binary floating-point 형태의 데이터를 저장하기 위해 64비트를 사용한다면, 부호에 1개 비트, 지수에 11개 비트, 만티사에 나머지 52개 비트를 사용함 - 소수점 이하 부분을 다른 진법수로 변환하는 방법 - 새 진법수로 나누는 대신 곱함 → 곱해서 얻어지는 각 자리 올림 수는 결과의 오른쪽에 둠 → 결과의 소수점 이하 부분은 새 진법수로 곱함 - 이러한 과정을 소수점 이하 부분이 0이 될 때까지 반복함 - **부동 소수점 오차** 3분의 1 분수의 경우 0.33333... 으로 표현되는데 이렇게 되면 0.000000...001 의 오차가 생길 수 밖에 없음. 이런 부동 소수점 수의 연산이 중첩될수록 오차가 커짐 → double 형을 사용하면 소수 부분을 15자리까지 표현할 수 있어서 float에 비해 오차가 적음 <br> ## 텍스트 데이터 표현 ##### 아이디어 - 텍스트 문서는 문단 → 문장 → 단어 → 하나의 문자로 분해 가능 - 텍스트 문서를 디지털화하기 위해서는 모든 문자를 표현할 수 있어야 함 → 문자는 유한하기 때문에 **binary string에 각 문자를 할당하면 되겠구나** - e.g. 영어 대소문자 56개, 숫자 10개, 공백 등 기타 문자 ~개 - 인코딩, 디코딩 ##### Character Set = 각 문자들, 그리고 그 문자들을 나타내기 위해 정의된 코드들의 리스트 - **ASCII** (American Standard Code for Information Interchange) - 문자 하나 = 8비트 = 1바이트 - 각 문자를 표현하기 위해 7비트(128개 문자)를 사용함 - 8번째 비트는 check bit로서 데이터 전송 과정의 에러 유무를 확인하는 데 쓰임 <br>![|w80|center](ASCII.png)<br> - Latin-1 Extended ASCII - 8비트를 전부 문자 표현에 쓰는 아스키(256개 문자 표현 가능) - **Unicode** - 전 세계에서 사용되는 모든 언어의 문자를 표현하기 위해 고안된 문자 집합 - 문자 하나 = (보통)16비트 = 2바이트 → 65,536개의 문자 표현 가능 <br> ## 음성 데이터 표현 ##### 아이디어 - 소리 = 고막에 닿는 공기의 진동, 파동 - 디지털화 하는 과정에서 소리의 파형이 비연속적으로 잘게 잘림 → 소리의 파형을 나타내는 전기적인 신호를 받아 **일련의 비연속적인 수**로 표현 = **샘플링(Sampling)** ##### 샘플링(Sampling) - 일정한 시간 간격으로 신호의 전압을 재어 그 값을 기록하는 것 - 소리를 재생하기 위해서는, 저장된 전압의 크기를 사용해서 새로운 연속적인 전자 신호를 만들어냄 - 전압의 변화가 저장된 두 개의 연속된 값들 사이의 변화가 일정하다고 가정함 → 정보 손실 발생 - 일반적으로 초당 40,000번 샘플링을 하면 그럴듯한 소리의 재생이 가능함 ##### 오디오 포맷 - 음성 데이터는 용량 때문에 주로 압축해서 저장함 (다양한 압축 테크닉이 있음) e.g. WAV, AU, AIFF, VQF, MP3 - MP3 - `MPEG-2 audio layer 3` 의 약자 - MPEG : Moving Picture Experts Group - 다른 포맷에 비해 월등히 우수한 압축률 때문에 요즘 주로 쓰이는 포맷 <br> ## 이미지와 그래픽스 데이터 표현 ##### 아이디어 - 색상은 우리의 망막에 도달하는 다양한 주파수의 빛을 감지하는 것 → 우리 망막에서는 **빨강, 초록, 파랑**을 기반으로 세 가지 색을 조합해 다양한 색을 인식함 = RGB 값 - RGB 값을 0~255 사이의 값으로 표현하고, 이는 상대적인 기여도를 나타냄 e.g. 0이면 기여 X, 1이면 온전히 기여함 - 이는 곧 3차원의 색 공간(color space)으로 표현 가능 <br>![|w60|center](color_space.png) - color depth(색의 심도) : 색을 표현하기 위해 사용되는 자료의 양 - high color : 16비트의 color depth를 가짐 - 기본색에 각 5비트, 투명도에 1비트 - **true color** : 24비트의 color depth를 가짐 - 각 기본 색에 8비트씩 할당(0~255) → 1,670만가지 이상의 서로 다른 색 표현 가능 ##### 이미지와 그림 디지털화하기 - 사진은 이미지의 아날로그적 표현 - 사진이나 그림을 디지털화 한다 = 픽셀이라는 점들의 집합으로 표현하는 작업 - **픽셀(pixel, picture elements, 화소)** 은 하나의 색으로 이루어짐 - 해상도(resolution) = 사진을 나타내기 위해 사용한 픽셀의 수 ##### 이미지 포맷 - **raster graphics format** - 이미지 정보를 픽셀 단위로 저장하는 방식 - 이미지와 함께 생성일, 해상도, 사이즈 등의 정보를 담고 있는 메타데이터(metadata)도 포함됨 - 종류 - BMP(bitmap file) - 이미지의 픽셀 값들을 왼쪽에서 오른쪽, 위에서 아래로 저장함 - 24비트 트루 컬러 지원 - GIF(Graphics Interchange Format) - 1987년에 개발된, 색상의 수를 256개로 제한한 포맷 → 몇 안 되는 색들로 이루어진 이미지, 그래픽스에 적합 - 일련의 이미지들로 작은 애니메이션을 보여줄 수 있음 - [[JPEG와 PNG의 차이점|JPG(JPEG)]] - 가까운 거리에 있는 색들을 평균해서 저장하는 방식 (우리 눈의 특성을 고려해 설계됨) - 컬러 사진 저장에 최적임 - [[JPEG와 PNG의 차이점|PNG(Portable Network Graphics)]] - GIF 포맷을 대체하기 위해 만들어짐 - GIF 포맷보다 더 크게 압축 가능하고 color depth도 더 넓은 범위를 아우름 - **vector graphics format** - 선이나 기하학적인 도형을 이용해서 이미지를 표현하는 방식 - 선의 방향, 두께, 색 등을 나타내는 일련의 명령어들로 이루어짐 - 픽셀 별로 색을 배정할 필요가 없어서 파일 사이즈가 작은 편 - 그림의 구성 요소들 수, 이미지의 복잡도가 영향을 줌 - 래스터 그래픽스 포맷은 그림의 크기나 비율에 따라 각각 다르게 여러 번 압축해야 하는 반면, 벡터 그래픽스 포맷은 **선이나 기본 도형의 크기를 수학적으로 조정할 수 있고**, 필요할 때마다 바로 계산해서 바꿀 수 있음 - 종류 - SVG(Scalable Vector Graphics) - 일반적인 텍스트로 표현됨 → 일반적인 텍스트 에디터로 생성, 수정 가능 - WWW 컨소시엄에서 개발됨, 거의 모든 웹 브라우저에서 지원 <br> ## 비디오 데이터 표현 ##### 아이디어 - 비디오 클립 = 정지된 이미지로 구성, 각 이미지는 압축되어야 함 - 비디오 코덱(Codec) : Compressor / Decompressor - 비디오를 컴퓨터나 네트워크로 재생할 수 있게끔 크기를 줄이는 데 쓰이는 방법 - 두 종류의 압축 방식 - **시간(temporal compression)** : 연속되는 프레임들의 차이점, 두 프레임 간의 차이를 구별하기 위해 키 프레임(key frame)을 골라서 이미지 전체를 저장함, 그리고 연속적인 이미지에서는 델타 프레임(delta frame)이라 부르는 변화된 부분만을 저장함 - **공간(spatial compression)** : 프레임에서 불필요한 부분을 제거함, 푸른 하늘처럼 동일한 색을 갖는 픽셀을 블록으로 나눠서 각 픽셀을 저장하는 대신 블록 영역의 좌표와 색을 저장함 (run-length 저장과 유사함) <br> <br> <br> <br>