나 JAVA 봐라

[컴퓨터 구조] 데이터 본문

CS

[컴퓨터 구조] 데이터

cool_code 2024. 1. 31. 21:32

전공 수업 때, CS를 분명히 공부했음에도 실제로 어떻게 적용되며 어떻게 각 계층이 이어지는 것인지에 대해 유기적으로 이해하지 못했었다. 이번에 강의를 듣고 정리하는 과정을 통해 확실하게 내 지식으로 가져가보고자 한다 !

 

강의는 패스트캠퍼스의 '현실 세상의 컴퓨터공학 지식 with 30가지 시나리오' 를 수강했다.

https://fastcampus.co.kr/dev_online_newcomputer

 

현실 세상의 컴퓨터공학 지식 with 30가지 실무 시나리오 초격차 패키지 Online. | 패스트캠퍼스

국내유일, 77시간 분량의 개발자를 위한 한 번에 끝내는 컴퓨터공학 (CS 지식) 강의를 확인하세요. 자료구조,알고리즘부터 디자인패턴, 클린코드까지 ! CS지식의 이론~실습뿐 아니라, 실제 실무에

fastcampus.co.kr


이진수와 2의 보수

컴퓨터는 0과 1만을 이해한다. 0과 1로만 표현하기에는... 표현할 것들이 너무 많다. 숫자 안에서도 양수, 음수, 소수가 있고 당장 이렇게 쓰고 있는 문자도 있다. 어떻게 0과 1로 표현할까?

  • 모든 양수를 0과 1로 표현하는 방법? : 이진수
  • 모든 음수를 0과 1로 표현하는 방법? : 2의 보수
  • 모든 소수를 0과 1로 표현하는 방법? : 부동 소수점
  • 모든 문자를 0과 1로 표현하는 방법? : 문자 집합 & 인코딩

이진법(이진수)

  • 이진법: 0과 1로 모든 수를 표기하는 방법
  • 이진수: 0과 1만으로 표현된 수
  • 1을 넘어가는 시점에 자리를 올린다. (십진수도 9 넘으면 10으로 자리 올림이 된다.)
  • 단점 : 숫자가 너무 길어진다. -> (해결 : 십육진법으로 표현한다.)

십육진법(십육진수)

  • 십육진법: 1~9과 A~F로 모든 수를 표기하는 방법
    • A==10, B==11, C==12, D==13, E==14, F==15
    • 이진법과 마찬가지로, 15(F)를 넘어가는 시점에 자리 올림
    • 십진수로 표현 안하는 이유? : 16은 2의 4제곱이기 때문에 변환이 편하다.

2의 보수법

  • 0과 1만으로 음수를 표현하는 방법 중 하나
  • 어떤 수 n을 그보다 큰 2^n에서 뺀 값 = 모든 0과 1을 뒤집은 뒤, 1을 더한 값

2의 보수 계산법

근데, 0101(2)가 음수를 표현했다면 -11이고, 양수로 표현했다면 5인데, 주어진 수가 양수/음수인 것을 어떻게 알 수 있을까?

CPU 내부 저장장치 중 '플래그'가 있는데, 이 플래그 레지스터를 통해 알 수 있다.

  • 플래그: CPU가 명령어를 실행하는 과정에서 참고할 정보의 모음
  • 음수 플래그가 세팅 되어 있을 경우: 음수
  • 음수 플래그가 세팅 되어 있지 않을 경우: 양수

부동 소수점

아래 Java 코드의 결과는 무엇일까?

 

우리가 알기로는 Equal이 나와야하지만, Not Equal이 나온다. 

이는, 컴퓨터 내의 소수점 표현 방식의 한계 때문이다. (= 부동 소수점의 한계 때문)

 

 

 

이와 같이 표현하는 것의 문제

  • 십진수 소수를 이진수로 표현할 때 십진수 소수와 이진수 소수 표현이 딱 맞아 떨어지지 않을 수 있다
  • e.g. 1/3이라는 분수 m X 3^n 꼴로 표현하면 딱 떨어진다
  • e.g. 1/3이라는 분수 m X 10^n 꼴로 표현하면 무한히 많은 가수가 필요하다 -> 하지만 가수를 담는 비트도 한정되어 있기 때문에, 비트 넘어가면 잘림 -> 이런 것 때문에 계산이 맞지 않을 때가 있다.

문자 인코딩과 디코딩

0과 1로 문자 표현하기

  • 문자 집합: 표현 가능한 문자들의 집합
  • 문자 인코딩: 문자를 0과 1로 이루어진 문자 코드로 변환
  • 문자 디코딩: 0과 1로 이루어진 문자 코드를 문자로 변환

문자가 깨지는 현상은 인코딩-디코딩 방식이 맞지 않거나, 문자 집합이 유효하지 않을 때 발생한다.

 

대표적인 문자 집합, 인코딩-디코딩 형식은 무엇이 있을까?

 

아스키 코드

아스키 문자 조합

  • 알파벳
  • 아라비아 숫자
  • 일부 특수 문자
  • 제어 문자

아래의 코드표와 대응하는 것이 곧 인코딩 하는 것이다.

아스키 코드 표

유니코드

아스키코드는 7비트로 표현하기 때문에 많은 문자를 표현할 수 없다. 그래서 한글도 표현할 수 없다. 

한글을 표현하기 위해 다른 인코딩 방식을 만들 수도 있지만, 다국어를 지원하는 곳에서 언어에 따라 다른 인코딩을 하도록 하면 복잡해진다. 그렇기 때문에 많은 문자를 표현할 수 있는 유니코드가 등장했다.

 

유니코드 문자 집합

  • 대부분의 언어
  • 특수문자
  • 이모티콘
  • 화살표 등

유니코드 코드 포인트 : 유니코드 문자에 부여된 고유한 수 (이 코드 포인트를 인코딩한다.)

 

코드 포인트를 인코딩하는 방식에 따라 utf-8, utf-16, utf-32 등으로 나뉜다.

즉, 유니코드 문자 집합을 인코딩하는 다양한 방법들이 있다.

'CS' 카테고리의 다른 글

[컴퓨터 구조] 명령어  (0) 2024.01.31