[CS] 5-1 기본 데이터 타입 / 배열 / 비트맵
기본 데이터 타입
- 프로그래밍 언어는 다양한 기본 데이터 타입을 제공한다.
- 데이터 타입에는 크기(size)와 해석(interpretation)이라는 두 가지 측면이 존재한다.
C 언어의 기본 데이터 타입들
char
과 short
의 차이(정수형 중에서도 문자형과 숫자형), char
과 unsigned char
의 차이(부호가 있는가 없는가)와 같은 것들을 해석의 측면으로 볼 수 있다.
- short, long, long long의 경우 모두 정수형이지만 비트의 수가 다르다는 점에서 크기의 측면으로 볼 수 있다.
- C언어를 기준으로 각 데이터 타입의 구분과 범위 및 크기를 표로 정리하면 다음과 같다.
C 언어의 기본 데이터 타입들
char
과 short
의 차이(정수형 중에서도 문자형과 숫자형), char
과 unsigned char
의 차이(부호가 있는가 없는가)와 같은 것들을 해석의 측면으로 볼 수 있다.포인터
- 포인터는 값이 있는 위치 즉 메모리주소를 담는 자료형이다.
#include <stdio.h>
int main()
{
int n = 10;
double d = 3.141592;
return 0;
}
* n이라는 변수와 d라는 변수에 각각 10과 3.141592를 담은 경우
- 00120B14라는 메모리 주소에 int 크기인 4byte만큼 공간을 잡고 10을 담았다.
- 실수도 마찬가지로 double크기인 8byte만큼 시작주소부터 공간을 잡은 다음에, 3.141592 값을 넣고 d라고 이름을 붙여줬다.
- 이때 메모리의 위치는 같은 코드라도 작성할 때마다 바뀌게 되는데, 우리가 변수에 할당한 이름을 통해서 메모리 주소를 기억하지 않아도 호출할 수 있다.
-
하지만 같은 변수명을 가진 경우 단순히 호출하는 것 만으로 원하는 변수명에 접근하지 못하는 경우가 발생한다.
- ex) a라는 변수가 함수 안에도 있고, 밖에도 있을 때.
-
이 때 포인터를 사용하면 실제 메모리의 위치를 지정할 수 있으며, 변수 명을 모르는 경우에도 값에 접근할 수 있다.
-
이후 C++에서는 포인터의 오류를 막기위한 레퍼런스라는 개념이 등장하기도 했다.
-
포인터와 같이 메모리에 접근하고 제어하는 특성 때문에 C언어를 Low레벨언어의 특성을 가졌다고 얘기하며, 메모리나 성능이 중요한 게임과 같은 프로그램들은 주로 C나 C++로 만들어진다.
배열
- 프로그래밍 언어에서 지원하는 배열(array)는 아파트와 같이 생각해볼 수 있다.
- 아파트 한 동(배열)의 안의 각 호수(번호)를 인덱스(index)라고 부른다.
- 일반적인 개발 규정에 따르면 배열에 들어가는 원소의 타입은 모두 같아야 한다.
10개의 16비트 수로 이루어진 배열
* 각 박스는 바이트(8비트)를 나타내며, 원소의 첨자는 인덱스를 표현한다.
- 위의 배열을 아파트로 볼 경우 10개의 호수가 있는 1동의 아파트라고 볼 수 있다.
- 오프셋(offset) : 기저주소로 부터 얼마나 떨어져 있는가를 나타내는 것으로, 저급 프로그래밍 언어에서는 상대주소라고도 부른다.
- ex) 위 그림의 경우 원소1은 기저주소인 원소0으로부터 2바이트의 오프셋 값을 가진다.
다차원 배열
- 위 그림과 같은 1차원배열 외에도 프로그래밍 언어는 다차원 배열을 지원한다.
- 1차원 배열이 한 동의 아파트의 각 층마다 한 개의 호수를 가진 아파트였다면, 2차원 배열은 각 층마다 여러 호수의 집을 가진 아파트, 3차원 배열은 그런 아파트의 동이 여러개, 4차원 배열은 그런 단지가 여러 개 있는 것으로 이해할 수 있다.
참조지역성
- 다차원 배열이 메모리에 저장되는 방식
- 배열이 다차원이 되더라도, 메모리에 저장될 때에는 1차원으로 저장된다. 이 때 어떤 순서로 저장할지를 결정하는 것이다.
행 우선(row major)
- 행(row)을 우선으로 저장하는 방식으로, 하나의 행을 완전히 저장하고, 다음 행을 저장하는 방식.
row major의 저장방식 및 결과물
열 우선(column major)
- 열(column)을 우선으로 저장하는 방식으로, 하나의 열을 완전히 저장하고, 다음 열을 저장하는 방식.
row major의 저장방식 및 결과물
- 이러한 저장 방식의 차이는 메모리의 주소와 캐시 메모리 운용에 영향을 준다.
배열의 인덱스 범위를 넘어선 위치에 접근할 경우
- '파스칼'과 같은 언어에서는 미리 정해둔 배열의 인덱스 범위를 넘어서지 않는지 검사한다.
- 'C'나 'C++'같은 언어의 경우 인덱스 검사를 하지 않는 경우도 있다.
- 이런 경우 접근하려는 주소에 아무 메모리가 없어 프로그램이 망가지거나 보안 상의 문제가 생길 수 있어, 코드 작성 시 인덱스 범위를 준수하도록 주의해야한다.
비트맵
-
데이터가 크지 않아 바이트 배열에 담을 경우 효율적이지 못할 때가 있다.
-
비트맵(bitmap) : 비트의 배열.
35비트의 비트맵
- 비트맵에서 수행할 수 있는 기본 연산은 비트 설정하기, 비트 지우기, 비트가 1인지 검사하기, 비트가 0인지 검사하기가 있다.
- 마스크(mask) : 비트를 조작하거나 검사할 때 사용하는 비트 패턴.
- 마스크를 사용해 비트맵의 기본 연산을 수행한다.
Author And Source
이 문제에 관하여([CS] 5-1 기본 데이터 타입 / 배열 / 비트맵), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ricky0813/CS-5-1-기본-데이터-타입-배열-비트맵
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
10개의 16비트 수로 이루어진 배열
* 각 박스는 바이트(8비트)를 나타내며, 원소의 첨자는 인덱스를 표현한다.
- ex) 위 그림의 경우 원소1은 기저주소인 원소0으로부터 2바이트의 오프셋 값을 가진다.
- 1차원 배열이 한 동의 아파트의 각 층마다 한 개의 호수를 가진 아파트였다면, 2차원 배열은 각 층마다 여러 호수의 집을 가진 아파트, 3차원 배열은 그런 아파트의 동이 여러개, 4차원 배열은 그런 단지가 여러 개 있는 것으로 이해할 수 있다.
row major의 저장방식 및 결과물
row major의 저장방식 및 결과물
- 이런 경우 접근하려는 주소에 아무 메모리가 없어 프로그램이 망가지거나 보안 상의 문제가 생길 수 있어, 코드 작성 시 인덱스 범위를 준수하도록 주의해야한다.
-
데이터가 크지 않아 바이트 배열에 담을 경우 효율적이지 못할 때가 있다.
-
비트맵(bitmap) : 비트의 배열.
35비트의 비트맵
- 비트맵에서 수행할 수 있는 기본 연산은 비트 설정하기, 비트 지우기, 비트가 1인지 검사하기, 비트가 0인지 검사하기가 있다.
- 마스크(mask) : 비트를 조작하거나 검사할 때 사용하는 비트 패턴.
- 마스크를 사용해 비트맵의 기본 연산을 수행한다.
Author And Source
이 문제에 관하여([CS] 5-1 기본 데이터 타입 / 배열 / 비트맵), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ricky0813/CS-5-1-기본-데이터-타입-배열-비트맵저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)