장 준
씨포유
장 준
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • 프로그래밍언어 (15)
      • c언어 (10)
      • 파이썬 (0)
      • 자바스크립트 (5)
    • PS (58)
      • 알고리즘 이론 (18)
      • 프로그래머스 (5)
      • 백준 (35)
    • CS (16)
      • 자료구조 (5)
      • 운영체제 (3)
      • 네트워크 (5)
      • 데이터베이스 (0)
      • 기초 지식 (3)
    • 브랜드 (1)

블로그 메뉴

  • 태그

인기 글

태그

  • recursion
  • PS
  • Priority Queue
  • Network
  • 프로그래머스
  • JavaScript
  • 자료구조
  • DP
  • 코딩테스트
  • C
  • nodejs
  • Visual Studio
  • Implementation
  • codesandbox
  • 백준
  • python3
  • CS
  • 파이썬
  • BFS
  • bitmask
  • DFS
  • 프로그래밍언어
  • 기초 지식
  • 씨포유
  • 자바스크립트
  • 알고리즘
  • Stack
  • JS
  • Kruskal algorithm
  • pypy3

최근 댓글

최근 글

hELLO · Designed By 정상우.
장 준

씨포유

C언어 독학 #8. 자료형
프로그래밍언어/c언어

C언어 독학 #8. 자료형

2020. 7. 18. 17:59
728x90

인삿말

 

안녕하세요 여러분.

잘 지내고 계신가요?

저는 종강한 지 얼마 안 돼서

이제 좀 한가해진 것 같습니다!

 

더위와 코로나까지 정말

힘든 시기인 것 같네요ㅜㅜ

이럴 때 일수록 다 같이 힘내서 공부하도록 해요!

2020/07/17 - [프로그래밍언어/c언어] - C언어 독학 #7. 비트 체계와 비트 연산자

 

C언어 독학 #7. 비트 체계와 비트 연산자

안녕하세요 알다브입니다. 저번 시간에 연산자에 대해서 알아봤습니다. 사실 저번 시간에 비트 연산자까지 다 끝내려했는데 비트 연산자까지 다루면 너무 길어질까봐 이번 글에서 따로 다루려

c4u-rdav.tistory.com


자료형이란?

 

지금까지 데이터를 저장하기 위해

변수를 사용했습니다.

 

이 변수에는 다양한 데이터들을 저장할 수 있는데요.

이러한 데이터들의 형식을 자료형이라고 합니다.

 

자료형은 크게 정수형과 실수형으로 나뉩니다.

 

정수형- char,  short,  int,  long       

실수형- float,  double,  long double

 

정수형, 실수형에서 또 세부적으로 나뉘는데

이는 크기에 따라 구분됩니다.

 

메모리 공간을 효율적으로 사용하기 위해

상황에 맞게 자료형을 사용하게 됩니다.

 

sizeof 연산자를 통해 자료형의 크기를 확인 할 수

있습니다.

 

sizeof 연산자를 사용해 %d 포맷으로

출력시키면 그 결과값들을 얻을 수 있습니다.

 

 

일반적으로 c언어에서 제공하는 자료형의

메모리 크기는

위와 같다는 것을 확인 하실 수 있습니다.

 

 


정수형

 

위에서 세부 자료형의 메모리 크기에 대해

알아봤습니다.

 

이번엔 정수형의 세부 자료형에서 데이터를 표현할 수

있는 범위에 대해 알아보겠습니다.

 

범위를 알아보기 위해 범위의

최솟값과 최댓값을 알려주는

시스템 라이브러리 limits.h를 사용해

알아보겠습니다.

 

 

각 자료형의 범위를 출력하기 위해

최솟값 최댓값을 나타내는 상수를

사용했습니다.

 

 

각 범위를 출력한 결과입니다.

 

전 글에서 2의 보수와 함께 비트 체계에 대해

알아봤는데요.

첫 비트는 부호를 나타낸다고 했습니다.

 

char 형은 메모리 크기가 1바이트

즉, 8비트로

 

256개의 숫자를 표현할 수 있는데

첫 비트는 부호를 의미하므로

범위가

 

0 ~ 255 이 아닌

 

-128 ~ 127 이 됩니다.

 

나머지도 마찬가지 입니다.

따라서 n이 비트 수라고 하면

범위는

 

-2^(n-1) ~ 2^(n-1)-1

로 정의할 수 있습니다.

 

지금까지 부호가 있는 정수형 자료형에 대해

알아봤습니다.

 

키워드 unsigned를 붙여서

부호가 없는 정수형 자료형으로

정의할 수 있습니다.

 

일반적으로 signed 키워드는 생략되기

때문에

따로 쓰지 않는 것입니다.

 

unsigned의 경우 0과 양수만 쓰기 때문에

양수 부분의 범위가 두 배가 됩니다.

 

선언 예)

 

unsigned int num;

 

메모리 크기가 1 바이트인 char형 보다도 일반적으로 정수를 사용하는 변수의 자료형으로 int를 선호

 

cpu가 가장 빠르게 처리하는 자료형이기 때문입니다!

이건 그냥 알고 있으면 될 거 같습니다.

 

 


실수형

 

이번엔 실수형의 세부 자료형에서 데이터를 표현할 수

있는 범위에 대해 알아보겠습니다.

 

실수의 범위를 알아보기 위해 

실수형 데이터 범위의

최솟값과 최댓값을 알려주는

시스템 라이브러리 float.h를 사용해

알아보겠습니다.

 

 

 

 

각 자료형의 범위를 출력하기 위해

최솟값 최댓값을 나타내는 상수를

사용했습니다.

 

 

각 범위를 출력한 결과입니다.

 

위의 코드를 보면 서식 %e로 실수를

출력했습니다.

%e 서식을 사용하면 매우 큰 실수형을

지수 형태로 출력하는 장점이 있습니다.

 

정수형 자료형에서는 int형을

선호한다고 했습니다.

실수형에서는 float형보다 double형을 선호

float형 보다 더 정밀하게 계산을 하기 때문입니다.

float형은 소수점 이하 6자리까지 표현할 수 있고

double형은 소수점 이하 15자리까지 표현할

수 있습니다.

 


문자형

 

컴퓨터는 문자를 인식하지 못하기 때문에

ASCII 코드로 숫자를 이용해서 문자를 인식할

수 있게 표준을 정해서 사용하고 있습니다.

 

아스키코드표 확인하러 가기

 

ASCII 코드란 American Standards Committee for Information Interchange의 약자로

숫자에 매핑된 문자를 확인할 수 있습니다.

아스키코드는  0부터 127까지 구성되어 있기 때문에 -128 ~ 128까지의

범위를 갖고 있는 char 자료형으로 사용하기 적합합니다.

 

char value;

value = 'a';
printf("%c는 %d \n", value, value);

value = 'b';
printf("%c는 %d \n", value, value);

<실행 결과>

a는 97

b는 98

 

서식 포맷 %c로는 아스키코드에 매핑된 문자를 출력하고,

% d는 아스키코드값을 출력합니다.

 


자료형 변환

 

c언어에서는 같은 자료형의 연산이 이루어지는 것이 좋지만,

다른 자료형과의 연산이 이루어지는 경우도 있습니다.

이럴 때 발생하는 것이 자료형 변환입니다.

 

자동 형 변환

 

컴파일러가 자동으로 자료형을 변환해줍니다.

자료 형 변환의 우선순위에 의해서 피연산자를 자동으로

자료형 변환을 시킨 뒤 연산을 하게 됩니다.

 

long double <- double <- float <- long <- int <- char

 

int num1 = 12;
double num2 = 10.2

printf("%d + %lf = %lf \n", num1, num2, num1 + num2);

// 12 + 10.200000 = 22.200000 출력

자료형 변환 우선순위에 의해 num1이 자동으로

double형으로 형 변환이 일어난 뒤 연산이 수행되어

위와 같은 결과를 얻습니다.

 

대입 연산자의 경우 

연산자의 오른쪽 피연산자의 자료형이

왼쪽 피연산자의 자료형으로 자동으로

형 변환되지만

 

더 큰 자료형에서 작은 자료형으로 대입 연산을 할 경우

데이터 손실이 발생하므로 가급적이면 하지 않는 것이 좋습니다.ㅜㅜ

 

double num1 = 23.32;
int num2 = num1;

printf("%d \n", num2);
// 23 출력

 

강제 형 변환

 

강제 형 변환은 컴파일러가 하는 것이 아니고,

프로그래머가 하는 것입니다.

 

int num1 = 10;
int num2 = 3;

printf("%lf \n", num1/num2);
// 3.000000 출력
printf("%lf \n", (double)num1/num2);
// 3.333333 출력

왜 위와 같은 결과가 나올까요?

 

첫 번째 연산 num1/num2은

두 정수형 피연산자가 연산을 통해

3이라는 정수형 결과를 얻게 되고

대입 연산에 의해 자동 형 변환이 일어나

3.000000

의 결과를 얻습니다.

 

두 번째 연산 (double) num1/num2은

num1이 강제 형 변환으로

실수형이 되고, 오른쪽에 있는 피연산자는

자동 형변환으로 같이 실수형이 되어

연산이 됩니다.

따라서

3.333333

의 결과를 얻습니다.


감사합니다.ㅎㅎ

728x90
반응형
저작자표시 (새창열림)

'프로그래밍언어 > c언어' 카테고리의 다른 글

C언어 독학 #10. 조건문  (0) 2022.07.17
C언어 독학 #9. 반복문  (2) 2022.07.09
C언어 독학 #7. 비트 체계와 비트 연산자  (0) 2020.07.17
C언어 독학 #6. 연산자  (0) 2020.05.13
C언어 독학 #5. 상수 변하지 않는 데이터  (2) 2020.05.12
    '프로그래밍언어/c언어' 카테고리의 다른 글
    • C언어 독학 #10. 조건문
    • C언어 독학 #9. 반복문
    • C언어 독학 #7. 비트 체계와 비트 연산자
    • C언어 독학 #6. 연산자
    장 준
    장 준
    C4U(Computer For You)

    티스토리툴바