ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [메모리] 메모리 주소
    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

    댓글