-
[메모리] 메모리 주소Stage/Computer Science 2021. 5. 31. 22:25
학습 목표
16진법을 읽고 쓸 수 있다. 메모리 주소에 접근하고 값을 받아오는 코드를 C로 작성할 수 있다.
1. 16진수(Hexadecimal)
컴퓨터과학에서는 숫자를 10진수나 2진수 대신 16진수로 표현하는 경우가 많다.
왜???
당연히 10진수나 2진수 대신 16진수로 표현할 경우에 장점이 있기 때문인데, 그 이유를 알아보자.1.1 10진수를 16진수로 바꾸기
우리가 생활하면서 사용하는 10진수와 16진수를 비교해보면 이유를 바로 알 수 있다.
- 10진수 255를 2진수로 바꾸면 11111111과 같다.
- 컴퓨터는 2진수를 사용하기 때문에 255를 11111111로 표현해야하지만, 너무 길다.
- 255뿐만 아니라 모든 데이터를 2진수로 표현해야 한다고 가정하면 너무 길어진다.
- 이를 16진수로 한번 표현해보자.
- 11111111를 1111 1111 로 두 덩어리로 나눠서 보면 각 자리 수당 2개(0과 1로 표현)이고 8개의 숫자가 있으니까 16진수로 표현 가능하다.
16진수를 표기하는 방법: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
1.2 16진수의 유용성
- 10진수 255를 2진수로 표현 하면 11111111이 되고, 10진수 255를 16진수로 표현하면 0xff가 된다.
- 누가봐도 2진수보다는 16진수로 표현하는 것이 간단해보인다.
- 16진수라는 것을 구별하기 위해 4bits 씩 16진수로 변환한 후 0x를 붙여준다.
2. 메모리 주소
정수형 변수 n에 50을 저장하고 출력해보자.
n은 int 타입이므로 컴퓨터 메모리 어딘가에는 4바이트 만큼 자리를 차지하고 들어가서 저장되어 있을 것이다.2.1 메모리 주소 가져오기
이 그림을 c언어로 표현해보자.
#include <stdio.h> int main(void) { int n = 50; printf("%p\n", &n); }
&
: C에서는 변수의 메모리상 주소를 받기 위해 &라는 연산자를 사용할 수 있다.- 이 코드를 출력해보면
0x7ffe00b3adbc
값이 나오는데, 앞에0x
를 보고 눈치챌 수 있듯이 16진법으로 표현된 변수 n의 메모리 주소이다.
2.2 메모리 값 가져오기
#include <stdio.h> int main(void) { int n = 50; printf("%i\n", *&n); }
*
를 사용하면 그 메모리 주소에 들어있는 실제 값을 가져올 수 있다.- 이 코드를 실행해보면 50 이라는 값이 출력된다.
- 먼저 n의 주소를 가져오고, 그 다음에 그 주소에 해당하는 값을 가져와서 출력한 것이다.
'Stage > Computer Science' 카테고리의 다른 글
[메모리] 문자열 (0) 2021.05.31 [메모리] 포인터 (0) 2021.05.31 [알고리즘] 병합 정렬 (0) 2021.05.29 [알고리즘] 재귀 (0) 2021.05.29 [알고리즘] 정렬 알고리즘의 실행시간 (0) 2021.05.29