티스토리 뷰
16진수
16진수는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 로 숫자를 나타낸다. 0에서 9까지는 10진수와 값이 동일하고, A는 10, B는 11, C는 12, D는 13, E는 14, F는 15를 나타낸다. 즉 16진수에서는 한자리 수로 0에서부터 15까지 표현할 수 있다.
그런데 위에서 보다시피, 0에서부터 9까지는 10진수와 동일한 값이라서 10진수와 헷갈릴 우려가 있다. 그래서 16진수에서는 모든 수 앞에 0x
를 붙인다. 이건 아무런 의미가 없고 그냥 16진수라는 뜻으로 붙인다. 예를 들어 16진수의 0은 0x0
으로 표기한다.
그렇다면 이해를 돕기 위해 2진수를 16진수로 바꾸어보자.
8비트가 나타낼 수 있는 가장 큰 수는 255이다. 2진수로는 11111111이다. 이걸 4비트씩 끊어서 보자. 4비트는 0에서부터 최대 15까지 나타낼 수 있다. 즉, 16진수가 나타낼 수 있는 한 자리수와 동일하다. 즉 11111111을 앞 부분의 1111과 뒷 부분의 1111로 나누어서 각각 십진수 값 15에 해당하는 F를 주면 FF가 된다. 그리고 마지막으로 0x를 붙여 16진수임을 표기하면 0xFF
가 된다.
메모리 주소
C언어에서는 메모리 주소를 출력할 수 있다. 이 메모리 주소는 16진수로 나타내어진다.
예를 들어 int n = 50;
으로 초기화했을 때, 이 변수 n은 컴퓨터 메모리의 어딘가에 저장되었을 것이다. 그런데 이 주소를 알고 싶으면 아래처럼 주소를 가져오라는 앰퍼샌드(&
)를 붙여서 출력하면 된다. 형식지정자는 pointer의 약자인 p를 쓴다.
#include<stdion.h>
int main(void)
{
int n = 50;
printf("%p\n", &n); // &는 변수 n의 주소를 가리킨다는 뜻이다.
}
실제로 출력해보면 0x로 시작하는 긴 16진수가 출력된다. 실제로 n이라는 변수가 메모리의 해당 주소에 있다는 것이다. 메모리의 주소는 포인터 라고 한다. 위 코드는 변수 n의 포인터 값을 출력하는 코드이다.
반대로 주소를 이용해서 값을 출력할 수도 있다.
#include<stdion.h>
int main(void)
{
int n = 50;
printf("%i\n", *&n); // *는 해당 주소로 가서 값을 가져오라는 뜻이다.
}
앰퍼샌드(&
)로 n의 주소를 알아낸 다음, 다시 반대로 애스터리스크(*
)로 해당 주소로 가서 값을 가져오게 한다. 이렇게 하면 변수 n에 저장된 값인 50이 출력된다. (요약: &는 What is the address? 이고 *는 Go to the address이다.)
#include <stdio.h>
int main(void)
{
int n = 50;
int *p = &n;
printf("%p\n", p);
printf("%i\n", *p); // 50을 출력한다. *&n을 출력하는 것과 동일하다.
}
여기서 int *p
는 새로운 자료형의 변수다. int *
는 이 변수는 포인터를 값으로 가지며, 포인터가 가리키는 값은 int라는 뜻이다 . 즉 변수 p는 포인터 값을 저장하는 포인터 변수이다.
위 코드에서는 변수 n의 메모리 주소를 저장하였다.
'공부일지(TIL) > Others' 카테고리의 다른 글
[C언어] 문자열 복사와 메모리 해제 (0) | 2021.02.22 |
---|---|
[C언어] string 구현하기 (0) | 2021.02.18 |
[C언어] char과 string, 사용자 함수 만들기 (0) | 2021.02.05 |
하드웨어의 한계 (0) | 2021.01.22 |
컴퓨팅 사고 - 이진법 (0) | 2020.12.23 |
- Total
- Today
- Yesterday
- Conflict
- JavaScript
- Java
- getter
- 자바
- 인스턴스
- 깃
- Prefix Sums
- this
- react
- 리덕스
- useEffect
- Data Structure
- Redux
- GIT
- Session
- youtube data api
- til
- CSS
- 제네릭스
- linkedlist
- rxjs
- c언어
- 알고리즘
- oracle
- jQuery
- 포인터 변수
- SQL
- 개발 공부
- package.json
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |