• [C언어] C언어의 기초 - 3.변수와 printf (1)2011.09.03 PM 11:53

게시물 주소 FONT글자 작게하기 글자 키우기
LINK : //sangsun0324.blog.me/

오늘은 여기까지 올립니다.
다시읽어보니간 않맞는 부분도 있어어서 내일 오후중에 하나하나 수정이가능할것같습니다.
그리고 마이피랑 블로그 태그가 안맞아서 이상하시면 제블로그로 오셔서 보세요.








변수

저번에는 그냥 Hell Hello world을 출력한 프로그램을 알아보았다.

이번에는 변수와 간단하게 printf문을 알아볼것이다.

일단 변수는 무엇일까?

네이버 국어사전에선 


 

변수6[발음 : 변ː수]

명사

1 .어떤 상황의 가변적 요인.
2 .<수학> 어떤 관계나 범위 에서 여러 가지 으로 변할 수 있는 수. [비슷한 말]부정원.


라고 한다.그럼 C에선 변수는 이것을 의미할까?


다음을 보며 좀더 자세하게 알아보자.

 #include<stdio.h>


int main(void)

{

int num;//num이라는 변수을 선언

num = 0;//0으로 대입

int val = 0;//val이라는 변수을 0으로 초기화

~~


num이라는 단어를 알다시피 변수라고 부른다. 변수는 메모리공간에 붙어주는 이름 이며 혹은 다른이름으로 식별자(Identifier - 변수나 함수,기타등 어떤개체를 식별하기위해 사용자가 부여하는 이름)라고 부른다.그리고 변수에 이름을 붙어지게되면 사용 할수있게 되는데 이걸을  흰히 C에서는 "변수을 선언한다"고 말한다.


변수이름
일단 변수나 함수는 이름을 정할때 몇가지 규칙이있는데...구지 지킬필요는 없다..다만 유혈사태만 일어날뿐..... 


1.변수명은 최소 8자에서 63까지 허용한다.(컴파일러따라 다름.지들 꼴리는데로 하는지라....)

2.용도맞는 명칭을 사용해야한다.


다음은 진짜 지켜할규칙이다.


1.변수명에 뛰어쓰기 하지말것.구지 사용하려면 밑줄문자(_)로 뛰어쓰기을 대신할것.

2.특수문자는 사용하지말것.

3.숫자을 앞에 두지 말것.


또한 소문자와 대문자을 구별을 해야된다.즉 대문자와 소문자다르다는것이다.비유하자면 "자쿠와는 다르다 자쿠와는"같다는 정도.어?


 다음 변수명의 적절한 예와 부적절한 예 이다.



 적절한예

 부적절한예

 wiggles

cat2

Hot_Tub

taxRate

_kcab

 &zj**

2cat

Hot-Tub

tax rate

don't

종종 하나 혹은 두개의 밑줄문자(_)로 시작하는 식별자를 사용하는데...되도록이면 사용을 피하는것을 

권장한다. 그이유는 아마 예약어(나중에 좀더)일부중 밑줄문자로 시작하는 것이 있기 때문인것으로 추정하고있어서 일부책에서는 사용하지 말라고 한다.(C기초플러스 5판에서 참고)


기본 데이터 타입(Data Type)

변수"num"앞에 있던것 "int"은 기본 데이터 타입이라고 부른다. (데이터 타입은 책마다 다르지만 보통 "기본 자료형"이라고 부른다.)

기본 데이터 타입은 변수 앞에 사용하며 변수의 저장정보및 표현방식을 의미한다.즉 "num은 정수형 데이터 타입 변수이다."라는것을 알려주는것이다.

또한 기본테이터형을 두가지로 나누는 기준이있는데

하나는 테이터을 표현하는 방식 즉 실수냐 정수냐라는 차이

또하나는 데이터의 크기로 나누는 방식

보통은 실수냐 정수냐라는 데이터의 표현방식으로 나눈다.


기본 데이터 타입 - 정수형

말그대로 변수을 정수로 저장정보및 표현방식 지정한다고 선언할때 사용한다.

종류는 아래와 같이 5개 정도있다.







정수형 데이터 타입

크기

값의 표현범위

char

8bit(1byte)

-128 이상 +127이하

short

16bit(2byte)

-32,768 이상 +32,767이하

int

32bit(4byte)

-2,147,483,648 이상 +2,147,483,647 이하

long

32bit(4byte)

-2,147,483,648 이상 +2,147,483,647 이하

long long

64bit(8byte)

-9,223,372,036,854,775,808이상

+9,223,372,036,854,775,807이하

참고 사양이지만 short와 long,long long 뒤에 int가 생략 되어있다.

다시말해 short는 short int ,long는 long int, long long 도 long long int 란 것다.


어맛! 자료형을 잘못 선택 했어염 뿌우♥

살다보면 실수하더시 변수의 데이터 타입을 잘못 선택하는 실수도있다.그래서 그런상황을 알아보자.


 #include<stdio.h>


int main(void)

{

int n1 = +2147483647;// int형 변수의 최대 값

int n2 = -2147483648;// int형 변수의 최소 값


printf("오버플로우 발생 전 : %d\n ",n1);

n1 = n1+100;//overflow

printf("오버플로우 발생 후 : %d \n",n1); 


printf("언더플로우 발생 전 : %d \n",n2);

n2 = n2-100;//underflow

printf("언더플로우 발생 후 : %d \n",n2); 


return 0;
}


int 형의 저장범위는 -2,147,483,648 이상 +2,147,483,647 이하 이다.

하지만 그이상 넘으면 오버플로우(overflow), 그 이하로 넘어가면 언더플로우(underflow)

발생된다는 거다.그렇게되면 부호도 바뀌고 숫자도 바뀌서 엉뚱한 값이 출력된다는 것이다.

그럼 어떻게 해결하는가?

간단하다. 데이터형을 바꾸어 주면 된다.


 #include <stdio.h>


int main(void)

{

//int n1 = +2147483647;// int형 변수의 최대 값

//int n2 = -2147483648;// int형 변수의 최소 값

long long n1 = +2147483647; 

long long n2 = -2147483648;


printf("오버플로우 발생 전 : %lld \n",n1);

//데이터형이 long long이면 서식문자 %lld

n1 = n1+100;//overflow

printf("오버플로우 발생 후 : %lld \n",n1); 


printf("언더플로우 발생 전 : %lld \n",n2);

//데이터형이 long이면 서식문자 %ld

n2 = n2-100;//underflow

printf("언더플로우 발생 후 : %lld \n",n2);

//visual studio계열 경우는 return문은 생략해도 상관 없음.

}


int형보다 더큰 long나 long long 형으로 바꾸어 주면 된다. 하지만...

만약의 부득이 한경우라면...


 #include <stdio.h>


int main(void)

{

int n1 = +2147483647;// int형 변수의 최대 값

int n2 = -2147483648;// int형 변수의 최소 값


printf("오버플로우 발생 전 : %lld \n",(long long)n1);

n1 = n1+100;//overflow

printf("오버플로우 발생 후 : %lld \n",(long long)n1); 


printf("언더플로우 발생 전 : %lld \n",(long long)n2);

n2 = n2-100;//underflow

printf("언더플로우 발생 후 : %lld \n",((long long)n2);  

}


이렇게 해주면 된다.이걸 형변환이라고한다.역쉬뒤에서


signed 와 unsigned

윗에있는 5개의 데이터타입(자료형) 앞에  unsigned붙어주면 값의 표현범위가 2배 늘어난다.

다만 크기는 그대로다.

정확하게 말하면 양의 정수로만 2배로 표현만 가능 한다는 것이다.


unsigned는 뜻그대로 무부호(無符號)즉 부호가 없다는것이다.그러니 부호가 있는 음의 정수을

표현하던범위 만큼  양의 정수에 추가로 표현이 가능하다는것이다.

정수형 데이터 타입

크기

값의 표현범위

unsigned char

8bit(1byte)

0 이상 +255이하

unsigned short

16bit(2byte)

0 이상 +65,535이하

unsigned int


32bit(4byte)

0 이상 +4,294,967,295 이하

unsigned long

32bit(4byte)

0 이상 +4,294,967,295 이하

unsigned long long

64bit(8byte)

0 이상

+18,446,744,073,709,551,615이하


그럼 signed는? 

이건은 부호 지닌이라는 뜻을 가지고있다.즉 음의 정수, 양의 정수을 표현한다는 것이다.

더정확하게 말하면 기본적으로 5개의 정수형 자료형 앞에 signed가 생략되어있다.

그렇기때문에 변하지는 않다.

댓글 : 4 개
이것이 뭐시당가 ㅠㅠ
자 이제 포인터의 세계로 떠나볼까!
헐 님 친추 하겠음
헐 님 친추 하겠음
친구글 비밀글 댓글 쓰기