본문 바로가기

Computer Engineering

[C] 0x01

FTP : 125.128.26.206 // student

C언어를 공부하기 전에 기본적인 컴퓨터에 대한 상식(?)에 대해 공부를 해보자.

먼저 컴퓨터는 0과1만 아는 기계. 즉, 컴퓨터에서 사용되는 수는 사람들이 일반적으로 사용하는 10진수가 아닌 2진수이다.

0 || 1 => 일종의 ON || OFF 방식으로 생각하고 전기신호가 들어왔다. 나갔다. 이런식으로 이해하면 조금 쉬울수도?

컴퓨터라는 기계가 엄청난 Data 를 조금더 편리하게 처리하기 위해서 사용을 하는데 정작 컴퓨터에서는 Data 를 어떻게 처리하는지 알기 위해 조금 더 알아보자.

계속 Data(데이터) 이야기를 했는데 컴퓨터에서 Data 를 처리할 때 정보의 최소단위를 Bit(비트) 라고 한다.

1 bit => 0 || 1 이렇게 두 가지로 표현을 할 수 있다. 2^1 = 2 이므로 두 가지로 표현할 수 있다.
눈치가 빠른 능력자분들은 벌써 예상할 수 있겠지만 조금 더 예를 들어서

2 bit => 00 || 01 || 10 || 11 이렇게 4 가지로 표현 가능하다. 4 = 2^2
3 bit => 000 || 001 || 010 || 011 || 100 || 101 || 110 || 111  이렇게 8가지로 표현 가능하다. 8 = 2^3

그리고 4 , 5 , 6  .... 이 되면 16, 32, 64 ... 가지를 표현할 수 있다.
점점 기하급수적으로 증가해서 만들어진 표현이 byte(바이트) 이다.

1 byte = 8 bit = 4 bit + 4bit
    "     =   2^8 가지 = 2^4 x 2^4
                                   16      16
                              => 16가지를 표현할 때에 0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14, 15 이렇게 표현할 수 있는데 10, 11, 12, 13, 14, 15 를 A, B, C, D, E, F 이렇게 사용을 한다.
*참고* : 숫자앞에 0 이 적혀있으면 8진수(Oct) , 0x 가 적혀있으면 16진수(Hex)

Winhex 라는 프로그램으로 윈도우 실행파일을 열어서 보면 4D 5A .... 이런 식으로 볼 수 있는데
이것도 1 byte 단위로 표현이 되어서 4D 5A 이렇게 나타나는 것을 알 수 있다.


최상위비트 (most significant bit, msb=

1 byte = 8 bit 라고 이야기했다. 
0 0 0 0 0 1 0 1  <= 이런식으로 표현을 할 수 있다.

8 bit 로 표현할 수 있는 정보의 수를 계산해보면  2^8 로 256 이니까
표현할 수 있는 숫자가 0~255 라고 생각할 수 있다.

하지만 위의 
0 0 0 0 0 1 0 1 에서 앞에 진한게 표시한 0 은 최상위비트 (most significant bit, msb)로  비트 단위의 연산에 있어서 그 숫자 값의 크기에 가장 크게 영향을 미치는 유효 숫자를 말한다.

10진수로 표현하면
0 0 0 0 0 1 0 1 => 5
1 0 0 0 0 1 0 1 => -5 가 된다. 즉 MSB(최상위비트)는 양수와 음수를 판별하는 용도로 사용이 되는 것이다.

하지만 이렇게 사용하면 2진수 계산시에 어려움이 생긴다.

   0 1 0 1                        5
+ 1 1 0 1                   + -5
----------------------------------
1 0 0 1 0                       0 이라는 결과가 나와야 한다.

하지만 쌩뚱맞게... 2

0 1 0 1 (십진수 5) 의 1의 보수는 1 0 1 0 이고 2의 보수는 1 0 1 1 이다.
1 0 1 1 을 더하면  (1) 0 0 0 0 이 된다. 제대로 된 연산 결과를 얻을 수 있다.





1의 보수 :  0 -> 1 , 1 -> 0
2의 보수 = 1의 보수 + 1