ch1_컴퓨터 내부의 언어체계

 

  • 비트 : 2진법의 binary + 숫자digit의 합성. 비트는 2진법을 사용한다. 비트를 사용하면 적은 비용으로 편리하게 기호를 담을 수 있다.
  • 논리연산 : 다른 비트들이 표현하는 내용으로부터 새로운 비트(참 / 거짓)를 만들어내는 동작
    • 불리언대수 : 비트에 대해 사용할 수 있는 연산 규칙의 집합
      • NOT : NOT T = F
      • AND : T AND F = F
      • OR : T OR F = T
      • XOR : T XOR F = T; 각 피연산자가 다른경우에만 참이 된다.
    • 드모르간의 법칙 : a AND b는 NOT(NOT a and b)와 같다. 부정논리를 구현할 때, 동등한 긍정논리로 표현하여 훨씬 간단하게 결과를 계산할 수 있다.
  • 정수를 비트로 표현하는 방법
    • 양의 정수 표현 : 비트를 사용할 때는 2를 밑으로 하는 2진수 체계를 사용한다. 가장 오른쪽 비트를 가장 작은 유효비트(least significant bit), 가장 왼쪽의 비트를 가장 큰 유효 비트(most significant bit)라고 부른다.
    • 2진수 덧셈 : 2진수에서 각 비트를 LSB에서 MSB쪽으로 더하며, 결과가 1보다 크면 1을 다음 왼쪽자리로 올린다. 사용하는 비트의 개수로 표현할 수 있는 범위를 벗어나면 오버플로가 발생한다. MSB에서 올림값이 발생하면, 조건코드(상태코드) 레지스터의 오버플로 비트에 오버플로 발생여부를 기록한다.
    • 음수 표현
      • 부호와 크기 : 음수와 양수를 구분하기 위해 흔히 MSB를 부호sign을 사용하고, 나머지 비트를 수의 크기로 사용하는 표현법이다. 그러나 부호와 크기 표현법은 0을 표현하는 방법이 2가지라 낭비가 있다는 점, XOR과 AND를 통한 덧셈계산을 사용할 수 없다는 점에서 널리 쓰이지 않는다.
      • 1의 보수 : 음수를 표현하기 위해 양수의 모든 비트를 뒤집는 방법. 그러나 MSB에서 올림이 발생한 경우 LSB로 올림을 전달하는 순환올림이 발생한다. 따라서 덧셈과정을 처리하기 위한 추가적인 비용이 발생하여 널리 쓰이지 않는다.
      • 2의 보수 : 부호가 있는 정수를 표현할 때 널리 쓰인다. 어떤 수의 비트를 뒤집고, 1을 추가하여 음수를 얻는다.
  • 실수를 표현하는 방법
    • 고정소수점 표현법 : 필요한 범위의 실수값을 표현하기 위해 필요한 비트의 개수가 너무 많아지기 때문에 잘 쓰이지 않는다.
    • 부동소수점 표현법 : 가수(소수점 왼쪽이 한자리뿐인 2진 소수)와 지수(2의 거듭제곱 횟수)로 나누어 실수를 표현한다. 동일한 비트라도 표현하는 실수에 따라 소수점이 변경된다하여 부동소수점 표현법이라 한다. 이러한 부동소수점 표현법은 비효율성과 부작용이 있지만, 표준방법으로 사용된다.
    • IEEE 부동소수점 수 표준 : 부동소수점 시스템에서 낭비되는 비트 조합을 최소화하고 반올림을 쉽게 하기 위해 IEEE 754 표준으로 기능을 정의한다. 기본정밀도 수는 32비트, 2배정밀도 수는 64비트를 사용하여 부동소수점을 표현한다.
  • 2진 코드화한 10진수 시스템 : 2진코드화한 10진수 BCD는 2진수를 효율적으로 활용하지 못해 많이 쓰이진 않지만, 디스플레이나 가속도 센서등 비주류 분야에서 사용되는 경우가 있다.
  • 2진수를 다루는 쉬운 방법
    • 8진표현법 : 비트를 3개씩 그룹으로 묶어 각 그룹에 8진 숫자를 부여하여 2진수를 표현한다.
    • 16진표현법 : 비트를 4개씩 그룹으로 묶어 각 그룹에 16개 기호 중 하나(0~9~a~f)를 할당.
    • 프로그래밍 언어의 진법 표기법 : 0으로 시작하면 8진수, 1~9로 시작하면 10진수, 0x로 시작하면 16진수라 구분한다.
  • 비트 그룹의 이름 : 니블(4비트), 바이트(8비트), 하프워드(16비트), 워드(32비트), 더블워드(64비트). 킬로비트나 킬로바이트는 실제로 1000배를 뜻하진 않고, 밑이 2면서 1000에 가장 가까운 2^10=1024배를 뜻한다. 밑이 10인 경우와도 혼동되어 이를 구분하기 위해 밑이 2인 경우는 키비, 메비, 기비 등의 용어로 표현하는 경우가 늘어나고 있다.
  • 텍스트 표현
    • 아스키코드 : 키보드에 있는 모든 기호에 7비트 수 값을 할당.
    • 다른 표준의 진화 : 영미권 이외의 언어지원의 필요성으로 다른 표준들이 등장. 유니코드 표준은 문자에 16비트를 부여. 오늘날에는 21비트까지 확장 됨.
    • 유니코드 변환 형식 8비트 : 유니코드는 문자 코드에 따라 8비트 덩어리의 시퀀스(옥텟)로 인코딩.
  • 문자를 사용한 수 표현
    • 출력 가능하게 변경한 인코딩(QP인코딩, Quoted-Printable encoding) : 8비트 데이터를 7비트 데이터만 지원하는 통신경로로 송수신하기 위한 인코딩 방법. 전자우편 첨부를 처리하기 위해 만들어짐. 1바이트를 표현하기위해 3바이트를 사용하기 때문에 매우 비효율적임.
    • 베이스64인코딩 : 3바이트(24비트)를 6비트 4덩어리로 나누고, 각 덩어리에 출력가능한 문자를 할당해 표현. 모든 3바이트 조합을 4바이트 조합으로 변환할 수 있다. 원본 데이터 길이가 3바이트 배수가 아닌 경우, 패딩문자를 도입하여 끝에 = 혹은 ==를 붙인다. 전자우편 첨부파일 전송에 여전이 많이 사용되고 있다.
    • URL인코딩 : URL에서 몇몇 문자가 특별한 의미를 지니기 때문에, 해당문자를 리터럴로 표현하기 위해 등장한 인코딩이다. 퍼센트 인코딩이라고도 불리며, %뒤에 16진 표현을 덧붙이는 방식으로 문자를 인코딩한다.
  • 색을 표현하는 방법 : 컴퓨터 모니터는 RGB색을 섞어 색을 만들어 낸다(RGB모델)
    • 투명도 추가 : 알파라는 투명도 값을 추가하고, 알파 값을 미리 곱한 RGB값을 저장하여 알파를 곱하는 계산과정 반복을 생략한다.
    • 색 인코딩 : 웹페이지는 UTF-8 문자 시퀀스로 이루어지는 텍스트를 표현하기 때문에, 텍스트를 사용해 색을 표현할 방법이 필요하다.
      따라서 웹에서는 URL인코딩과 비슷하게 색을 16진 트리플렛으로 표현한다. #뒤에 16진 숫자를 추가해 #rrggbb처럼 표현하는 방식이다.
  • 정리 : 단순한 비트를 사용해 아주 큰 숫자나 문자, 색 등 복잡한 요소를 표현할 수 있다.

 

+ Recent posts