CS

컴퓨터 내부의 언어 체계

__ellie 2021. 7. 6. 00:09
반응형

언어의 세 가지 구성 요소

  • 기호가 들어갈 상자: 비트
  • 상자에 들어갈 기호
  • 상자의 순서

비트

비트는 2진법을 사용한다. 이 비트를 조합해 이어 붙여서 표현한다.

논리 연산

  • 비트 사용법 중 하나는 true/false를 표현하느 ㄴ것이다.
  • 다른 비트들이 표현하는 내용으로부터 새로운 비트를 만들어내는 동작을 '논리 연산'이라고 한다.
  • 불리언 대수
    • 불리언 연산자는 NOT, AND, OR과 합성연산인 XOR
  • 드모르간의 법칙
    • NotNot 비가온다 or NotNot 춥다 ⇒ Not Not 코트를 입는다.
    • Not(비가온다 and 춥다) ⇒ Not(코트를 입는다)
    • Not 연산을 수행하는데 하드웨어에 실제로 돈이 많이 들고
    • 연산을 연쇄적으로 사용하면 계산이 느려진다.

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

음수 표현

  • 부호와 크기
    • 가장 왼쪽 비트를 부호로 사용한다.
    • → 0을 표현하는 방법이 두 가지가 된다.
    • → XOR, AND를 통한 덧셈 계산을 할 수 없다.
  • 1의 보수
    • 양수의 모든 비트를 뒤집어서 음수를 표현하는 1의 보수법
    • 추가적인 하드웨어 없이는 제대로 작동할 수 었다.
    • 비용이 더 든다.
  • 2의 보수
    • 하드웨어를 추가할 수 없고 XOR, AND 연산만 사용해야 한다면?
    • +1을 더했을 때 0이 나오는 비트 패턴을 찾고, 이 패턴을 -1 이라고 한다.
    • 4비트의 경우는 0001 이다.
    • 1111 에 0001을 더하면 0000이 된다.
    • 따라서 앞으로는 1111을 -1 을 표현하는 비트 패턴으로 사용하자.
    • 이런 표현법을 2의 보수 표현법이라고 한다.
    • 어떤 수의 비트를 뒤집고 1을 추가하면 음수를 얻을 수 있다.

실수 표현

  • 고정 소수점 표현
    • 분수 표현과 숫자 표현 위치를 둔다.
    • 쓸모있는 범위의 실숫값을 표현하기 위해 필요한 비트 개수가 너무 많기 때문에 이런 방식을 사용하는 경우는 드물다.
  • 부동 소수점 표현법
    • 가수가 1.2로 같다고 해도 지수가 무엇인가에 따라 소수점 왼쪽 숫자의 자리사 1/10일 수도 있고 1일 수도 있기 때문에 이름이 부동 소수점이다.
    • ??
  • IEEE 부동소수점 수 표준
    • 정규화 트릭
      • 기본 정밀도
      • 2배 정밀도

2진수를 다루는 쉬운 방법

2진수는 읽기 어렵기 때문에 더 읽기 쉽게 표현할 수 있는 방법을 고안해냈다.

8진 표현법

  • 2진수 비트들을 3개씩 그룹으로 묶는다.

16진 표현법

  • 0 ~ abcdef

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

여러 프로그래밍 언어에서는 다음과 같은 표기법을 따른다.

  • 0부터 시작하는 숫자는 8진 숫자다.
  • 1부터 9 사이의 숫자로 시작하는 숫자는 10진수다.
  • Ox가 앞에 붙은 숫자는 16진수다.

비트 그룹의 이름

  • 비트는 너무 작아서 기본 단위로 사용하기에는 유용성이 떨어진다.
  • 8비트 덩어리가 기본 단위로 널리 쓰이기 시작했고 이를 '바이트'라고 부른다.

텍스트 표현

아스키 코드

  • 7비트 수 값을 할당
  • 8진수 사용

다른 표준의 진화

  • 영어 외의 언어를 지원해야 할 필요가 늘어나서 국제 표준화 기구는 유럽 언어를 지원할 수 있는 표준, 일본 산업 표준 위원회에서 JISX 0201 그리고 중국어, 아랍어, 한국(KS C 5601)을 만들었다.
  • 다른 표준으로 만든 이유는 비트가 지금보다 더 비싼 시절에 표준이 만들어졌다.
  • 그래서 문자를 7비트나 8비트에 욱여 넣었다.
  • 비트 가격이 떨어짐에 따라 유니코드라는 새로운 표준이 만들어졌고, 16비트 코드를 부여했다.
  • 유니코드는 그 후 21비트까지 확장됐다.

유니코드 변환 형식 8비트

  • 문자를 표현하는데 8비트 사용으로 모든 문자를 표현할 수 있는데 16비트는 낭비되므로
  • 문자 코드에 따라 각기 다른 인코딩을 사용해 이런 문제를 해결한다.
  • 인코딩은 다른 비트 패턴을 표현하기 위해 사용하느 ㄴ비트 패턴을 뜻한다.
  • 유니코드 변환 형식 8비트 (UTF-8 Unicode Transformation Format) 라는 인코딩 방식이 가장 널리 사용된다.
  • UTF-8은 아스키가 아닌 문자의 경우 아스키를 받아서 처리하는 프로그램이 깨지지 않는 방법으로 문자를 인코딩한다.
  • UTF-8은 8비트 덩어리(옥텟)의 시퀀스로 인코딩한다.
  • 첫번째 덩어리의 MSB쪽에 있는 비트들이 8비트 덩어리 시퀀스의 길이를 표현한다.
  • 프로그램이 문자 경계를 찾아야 하는 경우 이런 특성이 유용하다.
  • 8비트 덩어리에 들어가지 않는 문자라면, 16비트를 사용해서 표현한다.

문자를 사용한 수 표현

베이스64 인코딩

  • 3바이트 데이터를 4문자로 표현한다.
  • 24비트를 6비트 덩어리로 나누고 각 덩어리에 6비트값에 출력 가능한 문자를 할당해 표현한다.

URL 인코딩

  • URL에서는 문맥에서 몇몇 문자가 특별한 의미를 지니는데, 이런 특별한 의미를 지니는 문자를 리터럴로 사요할 필요가 있을 때
  • 퍼센트 인코딩을 할 수 있다.
  • /가 표현하는 특별한 의미를 뜻하고 싶지는 않은 경우, /를 %2F 라는 문자열로 대신한다.

색을 표현하는 방법

  • 컴퓨터 모니터는 빨간색, 녹색 파란색 광선을 섞어서 색을 만들어내며 이런 색 표현법을 RGB색 모델이라고 부른다.
  • 색을 표현할 때 24비트를 사용하는데 RGB
  • 투명도까지 포함하여 32비트로 색을 표현한다.

투명도 추가

  • 각 픽셀에 알파라는 투명도 값을 추가한다.
  • 여러 다른 알파값의 색을 합성해 새로운 색을 만들어내는 방법을 정의하는 일련의 합성 계산식이 있다.
  • 각 RGB에 알파값을 곱한다.
  • 이미지 합성은 색값을 알파로 곱하는 과정을 통해 이뤄진다.
  • 알파값을 미리 곱한 값을 저장한다는 말은 픽셀을 사용할 떄마다 알파를 곱하는 계산을 반복할 필요가 없다는 뜻이다.

색 인코딩

  • 웹 페이지는 주로 사람이 읽을 수 있는 UTF-8 문자의 시퀀스를 통해 이뤄지는 텍스트를 표현하기 때문에 텍스트를 사용해 색을 표현할 방법이 필요하다.
  • URL 인코딩과 비슷한 방법으로 색을 인코딩한다.
  • 웹에서는 색을 16진 트리플렛(hex triplet)로 표현한다.
  • 16진 트리플렛은 #뒤에 여섯 자리 16진 숫자를 추가해 '#rrggbb' 처럼 표현하는 방법이다.
  • 각각의 6비트 색값을 두 자리 문자로 된 16진 표기로 바꾼다.

'CS' 카테고리의 다른 글

브라우저의 동작 원리 알아보기  (0) 2021.06.22