컴퓨터 공학 - 기수법 및 비트, 보수 학습

기수법

  • 10진수(DEC, decimal) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 2진수(BIN, binary) : 0, 1
  • 8진수 (OCT, octal) : 0, 1, 2, 3, 4, 5, 6, 7
  • 16진수 (HEX, hexadecimal) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f

16진수 ↔ 2진수 변환 방법

16진수에 2진수 4자리 설정할 것
예시

1
2
fa(16) --> 11111010(2)
74(16) --> 01110100(2)

참고

1
2
a = 0b1010 (0b : binary라는 의미)
hex(a) --> 0xa (0x : hex라는 의미)




32bit와 64bit 나누는 기준

  • 한번에 보낼 수 있는 데이터의 양
  • 32bit : CPU에서 RAM으로 연결된 와이어가 32개 (와이어 1개당 1bit 전송)
  • 64bit : CPU에서 RAM으로 연결된 와이어가 64개
1
2
CPU에서 RAM으로 데이터 전송 시, 32bit의 경우 2진수로 32자리를 주소로 할당하게 되는데, 길이가 너무 길어서 16진수로 주소를 할당한다.
ex) 1010 1111 1111 1111 ... 1111(2) --> afffffff(16)

32bit
2^32개의 2진수로 표현 가능 (약 4G개의 byte로 구성 –> 램 4GB까지만 돌아갈 수 있다.)

64bit
2^64개의 2진수로 표현 가능(약 18exa개의 byte로 구성)




high-level language & low-level-language

high-leve language

  • 대표언어: C, C++ << Python, Javascript
  • CPU가 달라져도, compile만 다시 돌리면 된다.
    • 코딩 완료 이후, compile만 돌린다. (대신 메모리 바이트에 따라 int, short, char를 선택해야 한다.)

low-level language

  • 대표언어 : assembly language
  • 하드웨어에 binding되어 있다. –> 코딩 모두 완료해도, CPU 달라지면 다시 짜야 한다.

하드웨어 추상화

  • CPU 레지스트리, 메모리 상관없이 독립적인 코딩 작성을 허용한다.
  • 하드웨어의 차이를 숨겨서 응용 프로그램이 작동할 수 있는 일관된 플랫폼을 제공한다.)




음의 정수 표현

  1. 부호 비트는 1
  2. 정수를 2의 보수(two’s complement)로 저장
    • ex) -43 -> 43 -> 0010 1011(2) -> 1101 0100(2) (1의 보수) -> 1101 0101(2) (2의 보수)

9의 보수

1
2
3
4
3의 9의 보수는 6이다. 
--> 한자리 수에서 가장 큰 수가 되기 위해 더하는 값
23의 9의 보수는 76이다.
--> 두자리 수에서 가장 큰 수가 되기 위해 더하는 값

1의 보수

1
2
10110101(2)의 1의 보수는 01001010(2)
--> 11111111(2)가 되기 위해 더하는 값

2의 보수

1
2
10110101(2)의 2의 보수는 01001011(2)
--> 1의 보수에서 마지막 자리에 +1한 값

보수를 만든 이유

  • CPU에서는 빼기(-) 기능이 없다.
    1
    2
    3
    4
    5
    9 - 4 
    = 9 + (-4)
    = 1001(2) + 1100(2)
    = 0101(2)
    = 5