Supplementary/DRALG (2-1)

[Algorithm / DRALG_lec02] 데이터의 표현 : 정수

또김또 2023. 3. 16. 19:51

2-1 알고리즘 강의 정리 썸네일을 담당해줄 사진... 나름 수제짤이다ㅡㅡ!!!!


1. 2진수 변환

컴퓨터는 0과 1을 이용하여 모든 숫자를 표현하므로, 우리가 입력하는 10진수를 2진수로 변환한다.

우리는 이 변환 과정을 공부해야 한다...(웃을때가아님)

▲ cau_dralg_lec02 / 6p

 

① 10진수로 주어진 수를 몫이 1이 나올 때까지 나눈다.

② 이 때, 모든 나머지를 표시한다.

③ 그리고 몫부터 맨 처음의 나머지까지 거슬러 올라가면~! 2진수 변환 끝!!!!

 


2. 부호가 없는 정수

2진수의 맨 왼쪽부터 자리를 할당한다. 순서대로 2의 n승이며 맨 첫자리는 0승으로 시작한다.

한 자리당 1비트(1bits)이고, 8개의 배수 단위로 사용한다. (8비트 정수, 16비트 정수, 32비트 정수...)

 


3. 16진수

4개씩 묶어서 숫자를 표시할 수 있다. 이 때, 숫자표현 앞에 0x를 붙여줘야 하는데, 이는 16진수라는 것을 명시적으로 표현한 것이다. 그냥 적으면 10진수로 인식한다. (아마도..)

▲ cau_dralg_lec02 / 9p

예를 들어, 11110101이라는 8비트 정수가 있다면, 우리는 이것을 0xF5로 표시할 수 있는 것이다.

같은 방법으로 1001001011011100이라는 16비트 정수가 있다면, 이것을 0x92DC로 표시할 수 있다.

 

0x10과 10은 같은 수일까?!! 아니다!!! 0x10은 10진수로 바꾸면 16이기 때문이다.

그렇다면 0x05와 5는 같은 수일까?? 맞다 ~.~!! 위의 표를 외우도록 하자...

 


4. 음의 정수

위의 숫자들은 전부 부호가 없는 양의 정수 표현이다. 그렇다면, 음수를 표현할 수 없는 것일까?

컴퓨터는 음의 정수를 2의 보수로 표현한다.

▲ cau_dralg_lec02 / 13p

① 숫자를 2진수 8비트 정수 형태로 표시한다.

② 1의 보수로 바꾼다. (비트 반전)

2의 보수로 바꾼다. (+ 2^0)

 

굳이 이렇게 하는 이유...가 있다!!

모든 부호가 없는 수에 -를 붙이면 음수가 되는데, 그렇게 되면 -0이라는 수가 생긴다. 하지만 0 = -0 이므로, 메모리 공간이 낭비되는데 이것을 막을 수 있다.

또한 양수만 가지고 있을 경우, 컴퓨터는 덧셈(+)과 뺄셈(-)을 모두 해야하므로 계산에 혼란이 올 수 있다. 그런데 음수로 변환할 수 있다면 덧셈(+) 계산만 하면 되므로 연산이 쉬워진다.

 


5. 메모리 표현

컴퓨터를 사용해 본 사람이라면 '32비트 / 64비트 운영체제'라고 써있는 것을 본 적이 있을 것이다.

이는 바로 메모리 공간 1바이트(byte)에 대해 32비트 / 64비트 주소를 사용하겠다는 뜻이다.

강의자료에 그림으로 직관적으로 표현되어 있다.

▲ cau_dralg_lec02 / 18p

위 메모리 공간은 16진수로 표현된 32비트 주소이다. 0x뒤의 자릿수를 세어 보면 8자리이므로 8 * 4 = 32이다.

같은 방법으로 0xFE0A이면 16비트, 0xEE21B203F0EAFE05이면 64비트 운영체제의 메모리 공간임을 알 수 있다.

 

(1) 메모리 표현 : 1바이트 정수

메모리를 할당할 때, 랜덤한 메모리 주소를 지정하여 순서대로 할당한다. 예제로 확인하여 보자.

▲ cau_dralg_lec02 / 20p

(2) 메모리 표현 : 4바이트 정수

4바이트 정수의 경우 메모리 4개를 한 묶음으로 본다. c와 cpp의 경우 주소로 구분하지만, python의 경우 변수로 구분한다.

▲ cau_dralg_lec02 / 21p

 


6. 엔디언 (endian)

엔디언(endian)은 바이트 단위로 메모리에 데이터를 기록하는 순서를 의미한다.

빅 엔디언과 리틀 엔디언 두 종류가 있는데, 일반적으로 리틀 엔디언을 사용한다고 한다.

① 빅 엔디언 : 큰 부분이 앞으로

② 리틀 엔디언 : 작은 부분이 앞으로

종류 0x1234의 표현 0x12345678의 표현
빅 엔디언 12
34
12
34
56
78
리틀 엔디언 34
12
89
56
34
12

▲ cau_dralg_lec02 / 22p