자료형 (데이터 타입)
데이터 타입이란
- 비슷한 종류의 데이터 개체들과 그 개체들을 가지고 수행할 수 있는 연산들의 집합
- 예시: Java의 int, int배열, char, A(A가 클래스 이름인 경우) ...
데이터 타입을 보는 관점
- 메모리에 어떤 형태로 존재하는가
- 해당 타입에 속한 각 데이터를 어떤 구문을 사용해서 참조하는가?
- 해당 타입에 속한 각 데이터를 가지고 할 수 있는 연산은? 그 연산의 표현은?
타입으로 알 수 있는 정보
타입으로부터 알 수 있는 정보 예
- 값의 범위(range of values)
- 연산의 종류(set of operations)
- 유효 숫자의 범위(precision)
데이터 타입의 목적
- 실제 세계의 대상들을 표현.
- 공간을 효과적으로 쓸 수 있도록
컴파일러가 적절한 크기의 메모리를 할당하게 함.
int x -> x에 4byte 할당, char y -> y에 1byte 할당.
선언문은 어셈블리어에서 사라지게 된다. 대신 기계어에서 int -> 어떤 메모리 공간에 넣자! 로 함.
- 타입 검사로 오류를 사전에 알려줌
컴파일에서 오류를 일으켜 준다.
기본 데이터 타입
데이터 타입의 종류
기본 데이터 타입
- 다른 데이터 타입을 사용하지 않고도, 스스로 정의되는 데이터 타입.
- (많은 경우) 컴퓨터 하드웨어에서 지원됨
유도된 데이터 타입
- 배열, 클래스 타입, 포인터, 구조체...
정수, 실수, 참거짓, 문자는 컴퓨터 하드웨어에서 제공하는 기본 타입이다.
C에서는 클래스 타입은 없다.
컴퓨터 하드웨어에서 직접 지원되는 타입 1
정수
양수는 2진수 그대로, 음수는 2의 보수 표기법으로 표현된다.
우리가 쓰는 수 표현은 10진수이다. 4237 에서 맨 앞 비트의 수는 4, 맨 마지막 비트의 수는 9이다.
2진수에서 11은 1011이다. 2의 보수 표기법은
unsigned는 맨 앞의 부호 비트를 부호를 표현하는 것에 사용하지 않고 수의 범위를 더 늘린 것이다.
그런데 4294967295는 32비트로 unsigned 표기 시 모든 비트가 1이다. 다만, 컴퓨터에서 이 수를 읽을 때 unsigned로 읽어! 라고 하지 않았다면 2의 보수 표기법으로 읽게 되고 -1로 보게 된다.
우리가 입력을 줄 때 어떤 의도를 갖고 있었다면, 출력도 이와 같은 의도를 갖고 출력할 수 있도록 설정해야한다.
컴퓨터 하드웨어에서 직접 지원되는 타입 2
실수
- 수학적 실수는 오직 근사치로만 표현 가능하다.
- 파이나 자연상수 e 등은 유한하게 표현 불가.
- 컴퓨터의 2진수 표현 : 0.1.도 표현 불가.
실수를 표현하는 방법은 부동(떠 있는) 소수점(floating point)
메모리를 통해서 컴퓨터는 수를 가져와서 읽는다. 그렇다면, 3.14를 읽을 때 어느 만큼의 메모리가 3이고 어디가 0.14인지 구분해야하는데
예를 들어 메모리 칸 수가 20칸이면, 정수 부분 10칸 소수 부분 10칸 씩 나누면 되겠다! 하지만 메모리를 너무 비효율적으로 사용하게 된다. 3.124124 이런 경우라면 정수 부분의 메모리를 활용하지 않아 비효율적이다.
그래서 사용하는 표현 방법이 부동 소수점이다.
컴퓨터 하드웨어에서 직접 지원되는 타입 3
참거짓
- 조건 검사 등에 사용
- 주로 1byte로 표현
- 별도의 데이터 타입을 가지기도 하지만 c 에서는 정수 타입을 빌려서 사용한다. 0이 거짓, 1이 참.
컴퓨터 하드웨어에서 직접 지원되는 타입 4
문자 타입
문자 한 글자가 코드가 되어 사용
ASCII
참고:Unicode(Java, C#)
데이터 타입에 따른 값
pirntf("%d",65);
65라는 정수 값이 출력.
pirntf("%c",65);
ASCII 코드 65에 해당되는 문자가 출력.
pirntf("%c",'a');
문자 a가 출력
pirntf("%d",'a');
문자 a의 ASCII 코드가 출력.
'[언어 공부] > [C]' 카테고리의 다른 글
[C언어 공부] 데이터 변수 연산자 - 3 (0) | 2023.07.24 |
---|---|
[C언어 공부] 데이터 변수 연산자 - 1 (0) | 2023.07.24 |