STEP UP - 한 권으로 읽는 컴퓨터 구조와 프로그래밍 #1

연정·2022년 5월 23일
0

STUDY

목록 보기
1/4
post-thumbnail

CH.1 컴퓨터 내부의 언어 체계

'비트'란 무엇인가?
2진법을 사용한다는 뜻의 binary와 숫자를 뜻하는 digit의 조합
문자를 담는 하나의 작은 조각이라고나 할까...

  • 2진법을 사용하여 언어를 표현
  • 비트를 사용하면 적은 비용으로 편리하게 기호를 담을 수 있다. 왜?
  • 여러 개의 비트를 조합하여 새로운 비트를 만들어낼 수 있다 : 논리연산

    여러 개의 비트로 새로운 비트를 만들어내는 사례 )
    밖에 비가 내리거나 춥다면 코트를 입어라
    밖에 비가 오는가? true - 하나의 비트
    코트를 입는다 true - 하나의 비트

불리언 대수 (Boolean Algibra)
영국 수학자 조지 불 (George Boole) 이 만들어서 이름이 저런가보다
비트에 대해 사용할 수 있는 연산 규칙의 집합

  • 결합 / 교환 / 분배 법칙을 적용할 수 있다. >> 무슨 의미일까?
    • 결합 법칙 예시 : A + B + C = (A + B) + C
  • 기본 불리언 연산자 : NOT (!) , AND (&&) , OR (||) , XOR*

XOR (exclusive OR _ 배타적 OR)
첫 번째 비트와 두 번째 비트가 다른 값일 경우에만 참
a XOR b = (a OR b) AND (NOT(a AND b))

드모르간의 법칙
a AND b = NOT(NOT a OR NOT b)
AND 연산을 OR 연산으로 대신할 수 있는 방법


숫자를 비트로 표현하는 방법

  • 양의 정수 표현

    • 비트의 개수가 표현할 수 있는 값의 범위를 결정
    • LSB(least significant bit _ 가장 작은 유효 비트)
    • MSB(most significant bit _ 가장 큰 유효 비트)
    • leading zero : 특정 수를 표현하는데 필요한 것보다 더 많은 비트가 있을 때 (좌측)
    • 오버플로 : 덧셈의 결과가 MSB를 벗어난 경우
    • 언더플로 : 뺄셈 시 MSB 위쪽에서 값을 빌려오는 경우

  • 음의 정수 표현

    • 부호와 크기 표현법(sign and magnitude) : 하나의 비트를 부호 표현을 위해 사용하고 (0 : 양부호 / 1 : 음부호) 나머지 비트를 수의 크기를 표현하는데 사용하는 방법

      다만, 부호와 크기 표현법은 부호 표기를 위해 비트를 사용해야하므로 비용효율적이지 못하며 XOR & AND 계산법을 사용할 수 없음

    • 1의 보수 표현법(one's complement) : 하나의 비트를 부호 표현에 할당하고, 음수일 경우 양수의 모든 비트를 뒤집어 표현하는 방법

      이 역시 부호를 위한 비트가 필요하며, 계산 시 MSB 쪽에서 올림이 발생한 경우 LSB로 전달(순환 올림)해야 한다.

    • 2의 보수 표현법(two's complement) : 양수의 모든 비트를 뒤집고 +1을 하면 해당 값의 음수를 얻을 수 있는 방법 (MSB에서의 올림처리는 무시한다) 가장 많이 활용되는 방법

  • 실수 표현

    • 고정소수점 표현법(fixed-point) : 소수점의 위치를 임의로 고정하고 좌측은 정수 우측은 분수를 표현하는 용도의 비트로 사용하는 표현법

      원하는 만큼의 범위를 표현하려면 필요한 비트 수가 너무 많음

    • 부동소수점 표현법(floating-point) : 2를 몇 번 거듭제곱 했느냐에 따라 최종 값이 달라지게 하는 표현법

      조합 중 비트가 낭비되는 부분이 너무 많음
      ex) 0을 표현하는 방법이 1개 이상

    • IEEE 부동소수점 수 표준 : 컴퓨터에서 계산을 수행할 때 실수를 표현하는 표준 방법 (기본 정밀도 부동소수점 / 2배 정밀도 부동소수점)

  • 2진 코드화한 10진수(BCD, binary-coded decimal)
    2진수를 활용하여 10진수 숫자의 각 자리수를 표기.
    더이상 주류로 사용하지 않지만 여전히 특정 경우에 사용되기도 한다.
    (디스플레이, 가속도 센서 등)

  • 2진수를 더 다루기 쉽게!

    • 8진 표현법 : 2진수 비트들을 3개씩 묶어서 계산 (최종 계산 시 밑은 2가 아니라 8)
    • 16진 표현법 : 대부분의 컴퓨터 내부가 8비트의 배수를 사용해 만들어지므로 균일하고 효율적으로 나누기 위해 사용 (비트를 4개씩 묶어서 계산)

      프로그래밍 언어의 진수 표기법
      다수의 프로그래밍 언어에서는 아래와 같이 진수를 구분할 수 있도록 한다.
      0으로 시작하는 숫자는 8진수
      1부터 9 사이의 숫자로 시작하는 숫자는 10진수
      0x가 앞에 붙은 숫자는 16진수

비트 그룹의 이름

  • 비트 개수 4 : 니블(nibble)
  • 비트 개수 8 : 바이트(byte)
  • 비트 개수 16 : 하프워드(half word)
  • 비트 개수 32 : 워드(word) - 컴퓨터가 빠르게 처리할 수 있는 가장 큰 덩어리
  • 비트 개수 64 : 더블워드(double word)

About 인코딩

인코딩 (부호화)
다른 비트 패턴을 표현하기 위해 사용하는 비트 패턴
+) 문자 인코딩 : 문자들의 집합을 부호화하는 방법

아스키코드(American Standard Code for Information Interchange / 정보 교환을 위한 미국 표준 코드)

키보드에 있는 모든 기호에 대해 7비트 수 값을 할당하여 인코딩
비트가 지금보다 비싼 시절에 주로 사용된 표준 기준이며, 비트 가격이 떨어짐에 따라 문자에 16비트 코드를 부여하는 유니코드라는 새로운 기준이 생겨나게 되었다. (21비트까지 확장되었다고 한다)


유니코드
문자 코드에 따라 각기 다른 인코딩을 사용해 비트를 효율적으로 사용
(전 세계의 문자들을 컴퓨터 상에서 다룰 수 있도록)
ex) UTF-8(유니코드 변환 형식 8비트)
       : 모든 아스키 문자를 8비트로 표현 / 아스키가 아닌 문자의 경우 깨지지 않는 방법으로 문자를 인코딩

문자를 사용한 수 표현

  • 출력 가능하게 변경한 인코딩 (Quoted Printable Encoding / QP Encoding)
    : 8비트 데이터를 7비트 데이터만 지원하는 통신경로를 통해 송수신하기 위해 고안된 방법.
    : 아스키코드를 통해 표현할 수 없는 문자는 앞에 =를 붙여 =XX의 형태로 표현
    : 1바이트 표현을 위해 3바이트 활용 >> 비효율적

  • 베이스64 인코딩
    : 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
    : 모든 3바이트 조합을 4바이트 조합으로 변환 가능
    : 표현할 값 >> 아스키코드 값으로 변환 >> 8진수로 표현 >> 6비트로 나누어 인코딩
    : 원본 값이 3바이트의 배수가 아닌 경우 빈 자리에 패딩문자(=)를 삽입하여 수를 맞춘다

  • URL 인코딩 / 퍼센트 인코딩
    : 특별한 의미를 지닌 몇몇 문자의 일반적인 사용 (특별한 의미 없는 사용)을 위해 고안
    : % 뒤에 어떤 문자의 16진 표현을 덧붙이는 방식으로 문자 표현

profile
성장형 프론트엔드 개발자

0개의 댓글