갓비니

[C언어 복습]2. 변수&자료형 본문

Programming/C

[C언어 복습]2. 변수&자료형

갓비니 2017. 12. 28. 23:19

#변수와 상수

@변수(Variable) : -프로그램에서 데이터들이 일시적으로 저장되는 공간. 

 -변수는 메모리에 만들어진다.

 -언제든 다른 값으로 변경할 수 있다.

*변수를 이용하지 않는다면 ? -> 메모리의 주소를 이용해서 데이터를 저장해야 한다.

 

@상수(Constant) : -프로그램에서 한번 정해지면 변경할 필요가 없는 값. 리터럴 상수와 기호 상수가 있다.

  -숫자, 문자, 문자열 모두 상수가 될 수 있음.(리터럴 상수)

  -상수도 변수와 마찬가지로 메모리에 저장된다.

  -변수와 마찬가지로 자료형이 존재한다.

 

 

 

 

#자료형

 

 

 

 

 

 

자료형의 크기는 간단하게 sizeof 연산자를 이용하면 알 수 있다.

  -sizeof(변수이름), sizeof(자료형)

 

 

 

 

#변수&정수형

 

@ C 프로그램을 작성 할 때에는 항상 변수를 함수 시작 부분에서 선언해야한다.

@ 자료형을 unsigned라고만 지칭하면 unsigned int와 같은 의미가 된다.

또한 short형은 short int라고 쓸 수 있으며,

long형도 long int라고 쓸 수 있다.

 

ex)

-int a;

-short a; = short int a;

-long a; = long int a;

 

 

 

 

#Overflow

각 자료형의 변수들은 각각 나타낼 수 있는 정수의 범위가 제한되어있기 때문에

그 범위를 넘어가게 되면 overflow가 발생하게 된다.

범위를 넘어갔을 경우 다시 처음으로 돌아가서 시작하게 된다.

예) short(-32768~32767)의 경우, 최대값인 32767을 넘어가게 되면 그 다음값은 32768이 아니라 최저값인 -32768의 값을 가지게 된다.

unsigned short(0~65535)의 경우, 최대값인 65535를 넘어가게 되면 그 다음값은 65536이 아니라 최저값인 0을 가지게 된다.

 

*underflow라는 개념도 존재하는데, 오버플로우와 다르게 수가 너무 작아서 나타내기 힘든 때 나타난다.

 

오버플로우가 발생해도 컴파일러는 아무런 경고문도 보이지 않으므로 주의하여야 한다.(오버플로우를 겪지 않으려면 큰 자료형을 사용하는게 맘 편하다ㅜㅜ)

 

#상수

@정수 상수

-정수 상수는 기본적으로 int형으로 간주된다.

int형의 범위를 넘길 경우에는 long형으로 간주된다.

상수의 자료형을 프로그래머가 직접 지정하고 싶은 경우에는

unsigned int의 경우에는 정수 뒤에 u또는 U를 붙이면 되고,

long의 경우에는 정수뒤에 l 또는 L을 붙이면 된다.

unsigned long의 경우에는 정수 뒤에 ul 또는 UL을 붙이면 된다.

 

ex) 12345lu

 

@정수 상수는 8진법이나 16진법 등에서도 표기가 가능하다.

-8진수는 숫자 앞에 0를

-16진수는 숫자 앞에 0x를 붙이면 된다.

 

ex) 십진수를 8진수로

십진수 10을 8진수로 표현하려고 한다면?

 

10= 1 * 8의1승 + 2 * 8의0승 = 0  1  2  (8)

(012(8)에서 맨 앞의 0은 8진수라는 뜻의 0을 뜻함)

 

 

ex) 십진수를 16진수로

십진수 10을 16진수로 표현한다면?

 

10= 10 * 16의 0승 = 0xA (16)

(0xA에서 0x는 16진수라는 뜻이고,

16진수는 1 ~ 9까지는 수로 표현되고 10부터 15까지는 A~F까지로 표현된다.)

 

*16진수에서 대문자와 소문자는 구분하지 않는다.

0xA와 0xa는 같은 수이다.

 

 

 

8진수, 10진수, 16진수를 출력하는 프로그램

#include <stdio.h>

 

int main(void){

 

int a = 10; //십진수로 10

int b = 010; //8진수 10이고 십진수로는 8

int c = 0x10; //16진수 10이고 십진수로는 16

 

printf("a = %d\nb= %d\nc= %d\n", a, b, c); //모두 10진법으로 표기

printf("b는 8진수로 %o\n", b); // 8진수로 출력(%o이용)

printf("c는 16진수로 %x\n", c); // 16진수로 출력(%x이용)

 

 

return 0;

 

}

 

 

 

 

@기호상수

 보통 상수와 달리 이름이 없다.

이름을 붙이고 싶으면 기호 상수를 이용한다.

 

기호상수 정의법

1. #define 사용

-문장의 첫부분에 모여있다.

-보통 컴파일러가 동작하기전 전처리기(preprocessor)가 처리한다.

2. const 키워드 사용

-const를 변수 선언 앞에 붙이면 : 상수가 된다. 선언 시 const가 붙여진 변수는 일단 초기화되면 그 값이 변경 될 수 없다.

-또한 #define과는 다르게 끝에 세미콜론을 붙여야 한다.

 

ex) #define YEAR 2018

 

     const int YEAR = 2018;ggg

 

 

#부동소수점

컴퓨터에서 실수를 표현하는 방법에는 두가지가 있다.

 

1. 고정소수점(fixed-point)

고정소수점 방식은 소수점의 위치가 고정되어있다. 정수부분과 소수부분에 각각 일정 비트를 할당하는 방식이다. 이 방식은 보기에는 편할 지 모르지만 매우 큰 수는 표현할 수 없다는 단점이 있다.

 

2. 부동소수점(floating-point)

부동소수점 방식은 浮動소수점 방식, 즉 소수점이 둥둥 떠다닌다는 뜻(!)이다.

실수를 가수와 지수로 나누어서 표현하는 방식이다.

예를 들어 123,456,780,000 이란 수가 있다면 1.2345678 * 10e11 으로 나타낼 수 있다는 것이다.

1.2345678( 가수부분 ) * 10e8( 지수 부분 )

컴퓨터 내에서는 이런 식으로 표현된다.

0                    |     1.2345678      | 8

부호비트(1비트) | 가수부분(23비트) | 지수부분(8비트)

 

 

**부동소수점 자료형

C에서는 실수를   float, double 두가지 자료형으로 나타낸다.

float는 32비트 유효숫자는 6자리, double은 64비트 유효숫자는 16 이다.

여기서 유효숫자란? 32000이라는 수가 있을 때 3과 2는 의미가 있는 숫자이지만(유효숫자) 나머지 0들은 자릿수를 나타내는데 사용된다.

 

float 는 단일정밀도(single-precision)

double은 두배정밀도(double-precision)라고 부른다.

 

double은 float에 비해 비트의 크기가 크므로 보다 정확한 값을 가질 수 있다. 따라서 double을 사용하는 것이 좋다.

 

 

 

 

 

#문자형

 

문자형은 char형으로서, %c를 이용한다.

%c말고도 %d를 이용하는 경우가 있는데 이는 아스키 코드를 사용할때 필요하다.

 

char c= ' G ';

printf("%c는 %d의 아스키코드를 가진다" , c, c );

 

라는 문장은

G는 71의 아스키코드를 가진다 

라고 출력될 것이다.

char형 변수 c에 정수(1, 2...)를 더하여 %d로 출력하면 정수 값이 나오고, %c로 출력하면 알파벳이 나오게 된다. 

 

*참고로 char형은 문자뿐만아니라 8비트의 정수도 저장할 수 있다.

 

 

 

 

 

 

 

 

'Programming > C' 카테고리의 다른 글

[C언어 복습]1. 기초  (0) 2017.12.28