1. 16진수
- 컴퓨터 과학에서는 숫자를 16진수로 표현하는 일이 많다. 그 이유는 16진수가 10진수에 비해 2진수를 훨씬 더 간단하게 나타낼 수 있어서 컴퓨터 친화적이기 때문이다.
- 예를 들어, 11110000(2) 이라면 16진수는 4자리씩 끊어서 f0이라고 나타낸다. 즉 4비트씩 간단하게 나눠진다.
- 주로 16진수를 나타낼 때에는 앞에 0x를 붙여서 0xf0과 같이 구분하여 나타낸다.
- 16진수는 정보를 훨씬 더 짧게 표현할 수 있다는 장점도 있다.
2. 메모리 주소
* 메모리 주소
- 정수형 변수 n에 24라는 값을 저장하고 출력한다고 가정하자.
- n은 int 자료형이므로 메모리 어딘가에서 4바이트 만큼 자리를 차지한다.
- n은 메모리상에서의 주소값을 갖고 있다. 메모리 상에서의 주소는 C에서 '&'연산자로 받아올 수 있다.
- 주소에 있는 값은 *로 받아올 수 있다.
#include <stdio.h>
int main(void)
{
int n = 24;
printf("%p\n", &n); //0x7ffca33251ac
printf("%i\n", *&n); //24
}
* 포인터
- 위에서도 볼 수 있듯이 메모리 주소는 직접 관리하기 매우 어려워 보인다.
- 이 때 필요한 것이 포인터이다. 포인터는 변수의 주소를 쉽게 저장하거나 접근하게 해준다.
- 주소에 있는 값을 가져오는 '*' 연산자로 포인터 역할을 하는 변수를 선언할 수 있다.
#include <stdio.h>
int main(void)
{
int n = 24;
int *p = &n;
printf("%p\n", p); //0x7fff123abc
printf("%i\n", *p); //24
}
- *은 이 변수가 포인터라는 의미를 갖는다. 여기서 int는 이 포인터가 가르키는 변수를 의미한다.
- 프린트 문으로 n의 주소와 포인터가 가리키는 변수의 값을 출력할 수 있다.
- 위 그림과 같이 p에는 주소가 담긴다.
- 하지만 주소값을 생각하기 보다는 추상적으로 p가 n을 가르킨다고 할 수 있다.
- 아래의 영상은 포인터를 이해하는데 꽤 도움이 되어서 가져와보았다.
참고
이 글은 하버드 대학교 David Malan 교수의 CS50 강의를 수강 후 정리하며 쓴 글입니다. 코드는 C언어로 작성되었으며, 개발환경은 CS50 IDE에 최적화되어 있습니다. 일부 라이브러리는 다른 환경에서 별도의 설정이 필요할 수 있습니다.
CS50 공식사이트
부스트코스
CS50 IDE
얄팍한 코딩사전
'Computer Science > Computer Organization' 카테고리의 다른 글
<컴퓨터 구조> 메모리 교환, 스택, 힙 (0) | 2021.02.19 |
---|---|
<메모리> 문자열과 메모리 (0) | 2021.02.18 |
<컴퓨터 구조> 컴파일링과 디버깅 (0) | 2021.01.27 |
<컴퓨터 구조> 하드웨어의 한계 (0) | 2021.01.20 |
<컴퓨팅 사고> 알고리즘 (0) | 2021.01.19 |