YUYANE

C / 16진법과 메모리 주소(&연산자, 포인터) 본문

Programming Languages/C

C / 16진법과 메모리 주소(&연산자, 포인터)

YUYA 2021. 2. 15. 10:11

학습 강의

www.boostcourse.org/cs112/lecture/119027

www.boostcourse.org/cs112/lecture/119028

 

 

16진법의 유용성

 

- 컴퓨터의 메모리와 파일(이미지 등)을 만들거나 수정할 때 컴퓨터나 휴대폰 속 메모리의 위치를 각 바이트에 고유한 숫자를 부여함으로써 표현한다.

- 아스키 코드에 의해 알파벳은 10진수의 숫자에 해당한다. 문제는, 컴퓨터로 처리하기 위해 10진수를 2진수로 표현하게 되면 숫자가 너무 길어지게 된다. 그런데, 16진수로 표현하면 아래 예시에서도 볼 수 있듯이 2진수로 표현할 때 보다 훨씬 간단해진다. 

- 10진수, 2진수, 16진수의 비교 예시

네이버 부스트코스, 모두를 위한 컴퓨터 과학(CS50)

( 16진수는 16진수를 구분하기 위해 앞에 '0x'를 붙인다. 이외의 다른 의미는 없다.)

- 또한 컴퓨터는 바이트 단위(1 byte = 8 bits)로 정보를 표현하는데, 2개의 16진수는 1bytedml 2진수로 변환되기 때문에 정보 표현하기에 매우 유용하다.

 

 

16진법의 표기 방법

 

0 1 2 3 4 5 6 7 8 9 a b c d e f

- 알파벳 a - f 가 10 - 15를 대신한다.

- 다음 수는 10진수로 255를 16진수로 나타낸 것이다.

네이버 부스트코스, 모두를 위한 컴퓨터 과학(CS50)

 

 

메모리 주소, &연산자와 포인터(*)

 

- 변수를 선언하면, 자료형에 따라 일정 크기를 차지하며 메모리에 저장된다. (예를 들어 int형이라면 4바이트 자리 차지)

- C에서는 '&' 이라는 연산자를 사용하여 변수의 메모리상 주소를 받을 수 있다.

- 반대로 '*'를 사용하면 그 메모리 주소에 있는 실제 변수의 값을 얻을 수 있다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%p\n",&n);//what's the address?, 출력 결과 : 0x7ffec373abac
    printf("%i\n",*&n);//GO to the address, 출력 결과 : 50
}

- 변수에 메모리 주소를 직접 저장할 수 있는데, 그럴 땐 포인터를 사용해야 한다. 포인터는 저장되는 그 메모리 주소를 가리키는 역할을 한다. 

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%p\n",&n);//what's the address?
    printf("%i\n",*&n);//Go to the address
    
    int *p = &n; // 자료형 int를 가리키는 포인터, 주소는 반드시 포인터에 저장
    printf("%p\n",p); // 출력 결과 : 0x7ffea22ebfac
    printf("%i\n",*p); // 출력 결과 : 50
}

 

 

'Programming Languages > C' 카테고리의 다른 글

C / malloc() 과 free()  (0) 2021.02.23
C / 포인터와 문자열  (0) 2021.02.16
C / 명령행 인자 ( command line argument)  (0) 2021.01.26
C / 컴파일 과정에 대해서  (0) 2021.01.25
C / 포인터 사용하기 (코드리뷰)  (0) 2021.01.22
Comments