[CS50] 메모리 - 메모리 주소

TIL

메모리 주소

C로 작성한 변수들은 실제로 컴퓨터 메모리에 어떻게 저장될까? 메모리 주소를 나타내는 방법과 그 주소를 알아내는 방법, 그 주소에 찾아가는 방법을 알아보자.

 

16진수

컴퓨터 과학에서는 숫자를 10진수나 2진수 대신 16진수(Hexadecimal)로 표현하는 경우가 많다. 16진수를 사용하면 10진수보다 2진수를 나타내기가 더 편리하기 때문이다.

10진수를 16진수로 바꾸기

JPG 이미지 파일은 항상 255 216 255로 시작하는데, 이것은 10진수다. 하지만 컴퓨터는 0과 1만 이해할 수 있기 때문에 실제로는 10진수를 사용하지 않는다.

16진수에서는 10부터 15까지를 a - f로 표현한다. 그리고 0x를 붙여 뒤에 오는 문자들이 16진수임을 알린다.

 

변환 예시:

15: 0x0f
16: 0x10
17: 0x11
...
26: 0x1a

 

JPG 파일 시작 값:

  • 10진수: 255 216 255
  • 2진수: 11111111 11011000 11111111
  • 16진수: 0xff 0xd8 0xff

 

16진수의 유용성

ASCII 코드에 의해 "A, B, C"는 10진수로 65 66 67에 해당한다.

2진수로 표현하면 01000001 01000010 01000011이 되는데 길이가 너무 길다.

 

컴퓨터는 8개의 비트가 모인 바이트 단위로 정보를 표현한다. 2개의 16진수는 정확히 1바이트의 2진수로 변환되어 정보를 표현하기에 매우 유용하다.

 

변환 비교:

  • 2진수: 01000001 (8자리)
  • 16진수: 0x41 (2자리)

 

메모리 주소

C에서는 & 연산자를 통해 변수의 메모리상 주소를 받을 수 있다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%p\n", &n);
}

 

출력 예시:

0x7ffe00b3adbc
  • &n: 변수 n의 메모리 주소
  • %p: 포인터(주소) 형식 지정자
  • 0x7ffe00b3adbc: 16진법으로 표현된 메모리 주소

 

역참조 연산자

역으로 메모리 주소에 있는 실제 값을 얻으려면 * 연산자를 사용한다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", *&n);
}
// 출력: 50

동작 과정:

  1. &n: n의 주소를 얻음 (예: 0x7ffe00b3adbc)
  2. *&n: 그 주소에 해당하는 값을 얻음 (50)

연산자 정리:

  • &: 주소 연산자 (address-of operator)
  • *: 역참조 연산자 (dereference operator)

 

연습 문제

Q. "CS50"을 16진수로 표현해보자
1단계: ASCII 코드 (10진수)

C  → 67
S  → 83
5  → 53
0  → 48

 

2단계: 2진수

67 → 01000011
83 → 01010011
53 → 00110101
48 → 00110000

 

3단계: 16진수

01000011 → 0x43
01010011 → 0x53
00110101 → 0x35
00110000 → 0x30

 

최종:

0x43533530

'TIL' 카테고리의 다른 글

[CS50] 메모리 - 문자열과 메모리  (0) 2025.11.07
[CS50] 메모리 - 포인터  (0) 2025.11.07
[CS50] 알고리즘 - 병합 정렬  (0) 2025.11.06
[CS50] 알고리즘 - 재귀  (0) 2025.11.06
[CS50] 알고리즘 - 정렬 알고리즘의 실행시간  (0) 2025.11.06
'TIL' 카테고리의 다른 글
  • [CS50] 메모리 - 문자열과 메모리
  • [CS50] 메모리 - 포인터
  • [CS50] 알고리즘 - 병합 정렬
  • [CS50] 알고리즘 - 재귀
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Next.js
    바닐라 자바스크립트
    CS
    자료구조
    App Router
    제네릭
    페이지 라우터
    algorithm
    memory
    인터페이스
    앱 라우터
    함수 타입
    javascript
    타입 좁히기
    cs50
    알고리즘
    트러블 슈팅
    문자열
    generic
    useState
    Pages Router
    emotion diary
    ai 감성 일기장
    typescript
    react
    Trouble Shooting
    Spa
    배열
    C
    클래스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 메모리 - 메모리 주소
상단으로

티스토리툴바