컴퓨터 내부에서 사용되는 언어체계는 "비트"이다. 

비트(bit)는 2진법을 사용한다. 이 개념은 추상적이라서 사용자, 설계자가 정의하기 나름이다.

예를 들어 비트 하나를 스위치로 생각해서 on/off 나 1이면 오후, 0이면 오전 처럼 임의로 정의해서 사용할 수 있다. 

논리 연산

비트를 참, 거짓으로 사용해서 어떤 연산을 하는 것을 말한다.

불리언 대수

조지 불이 만든 비트(참, 거짓)에 사용할 수 있는 연산 규칙이다.

NOT, AND, OR, XOR의 연산이 있다.

다 아니까 생략.

드 모르간 법칙

불리언 대수에 적용할 수 있는 추가적인 법칙이다.

논리 연산에 모든 것을 뒤집었을 때의 결과는 같다.

a AND b == NOT(NOT a OR NOT b)

https://m.blog.naver.com/mino522/220414861127

비트로 수를 표현하는 방법

인간은 10진수를 사용한다. 

각 자릿수에 0~9까지 10가지 숫자가 들어갈 수 있다.

2진수는 2를 밑으로 사용하는 체계이다. 

각 자릿수에 0~1까지 2가지 숫자가 들어간다. 

10진수 5028 == 2진수 1001110100100

10^3 10^2 10^1 10^0
5 0 2 8
2^12 2^11 2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
1 0 0 1 1 1 0 1 0 0 1 0 0

 

  • 10진수 세기
    • 0, 1, 2, 3,... , 9, 10, 11, 12, 13,... , 99, 100, 101, 102,... , 999, 1000
  • 2진수 세기
    • 0, 1, 10, 11, 100, 101, 110, 111, 1000

 

2진수 에서 가장 오른쪽의 2^0자리 수를 LSB(최소 유효 비트)라고 부르고, 가장 왼쪽의 2^n자리 수를 MSB(최대 유효 비트)라고 부른다.

2진수 덧셈

오른쪽(LSB)에서 왼쪽(MSB)으로 더한다.

덧셈 결과와 올림수를 고려해서 계산한다.

A B 덧셈 올림수
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

잘 보면 덧셈 결과는 XOR이고, 올림수는 AND이다.

컴퓨터 하드웨어에서 2진수의 덧셈은 XOR과 AND를 사용해서 할 수 있다.

덧셈을 하다 보면 덧셈의 결과가 사용할 수 있는 비트의 수를 넘어가는 경우가 있다. 이를 오버플로우라고 한다. 

예를 들어 1001 + 1000 = 10001이다. 하지만 4비트만 사용할 수 있다면, 0001만 결과로 나온다.

이런 경우 조건 코드 레지스터 - 오버플로우 비트에 오버플로우가 발생했다는 정보를 담아둔다. 

반대의 경우인 언더플로우도 있다. 

음수 표현

2진법에서 뺄셈은 음수를 더한다고 할 수 있다.

2진법에서 음수를 표현하는 방법은 3가지가 있다.

부호와 크기

가장 왼쪽 비트 MSB를 부호로 사용하는 것이다.

0이면 양수, 1이면 음수 이런 식이다.

이 방식의 단점은 사용할 수 있는 수의 범위가 줄어든다는 것과 0을 표현하는 방법이 2개가 생긴다.

또 연산 결과가 부정확하다. +1 = 0001, -1 = 1001을 더하면 1010 = -2이다.

그저 표현하는 방법일 뿐이다. 복잡한 방법으로 정당화할 수 있는 방법이 있긴 하다.

1의 보수

양수의 모든 비트를 반전시킨 것을 음수로 사용하는 것이다. 

0001 = 1, 1110 = -1이다.

덧셈을 할 때는 순환 올림을 해주어야 한다. MSB의 올림 비트를 LSB에 더해주는 것이다. 

1의 보수 방법도 +-0이 중복된다는 단점이 있다.

2의 보수

양수 비트에서 더했을 때, 0이 나오는 비트 패턴을 음수라고 지정한 것이다.

모든 수를 반전시키고, 1을 더하면 음수 비트 패턴이 나온다. 

0001 = +1, 1111 = -1

0001+1111=10000 인데 오버플로우가 발생해서 0000이 결과가 나온다.

2의 보수를 사용하면 0을 표현하는 방법이 1가지 이다.

실수 표현법

고정 소수점

소수점의 위치를 정해두고 항상 일정하게 사용, 해석하는 것이다.

예를 들어 4비트 중 왼쪽 2비트를 정수부분, 오른쪽 2비트를 소수(분수)부분으로 사용한다고 가정하고 계산하는 것이다.

넓은 범위의 수를 다룰수록 사용하는 비트가 많아진다는 단점이 있어 범용 컴퓨터에서 사용하지 않는다.

부동 소수점

과학적 표기법으로 수를 표현하는 방법이다. 0.0012를 1.2*10^-3 이런식으로 표현하듯 가수부와 지수부를 나눠서 사용하는 것을 말한다.

2진법에서 지수부의 밑은 2이다.

부동소수점 방식은 비트 조합 낭비와, 모든 비트 패턴을 표현하지 못한다는 단점이 있지만, 현재 컴퓨터에서 사용하는 표준 방법이다.

추후에 따로 다루겠다.

2진수를 다루는 방법

BCD

4비트의 2진수를 사용해서 10진수를 자릿수 별로 표현하는 것이다.

12는 0001(1) 0010(2) 이렇게 표현한다.

낭비되는 비트가 많다.

8진 표현법

2진수를 3비트씩 묶어서 8진수로 변환해 사용하는 것이다.

긴 2진수를 더 짧게 읽어지도록 하는 것이다.

16진 표현법

2진수를 4비트씩 묶어서 16진수로 변환해 사용하는 것이다.

진법 표기법

  2진수 8진수 10진수 16진수
숫자 10 10 10 10 10
10진수 변환 2 8 10 16

프로그래밍 언어에서 각 진수들을 표현하는 방법

  • 0으로 시작하면 8진수
    • 017 -> 15
  • 1~9로 시작하면 10진수
  • 0x로 시작하면 16진수
    • 0x12f -> 303

비트 그룹 이름

비트 이름
4 니블
8 바이트
16 하프 워드
32 워드
64 더블 워드

텍스트 표현

  • 아스키 코드
    • 7비트
    • 영어, 숫자, 특수문자, 제어문자 등
  • 유니코드
    • 모든 언어를 포함하는 표준
    • 16비트
      • 21비트 확장

'CS > 컴퓨터구조' 카테고리의 다른 글

CPU는 어떻게 명령을 처리할까?  (1) 2023.10.22

+ Recent posts