-
[C언어] C언어의 기초 - 3.변수와 printf (1)2011.09.03 PM 11:53
오늘은 여기까지 올립니다.
다시읽어보니간 않맞는 부분도 있어어서 내일 오후중에 하나하나 수정이가능할것같습니다.
그리고 마이피랑 블로그 태그가 안맞아서 이상하시면 제블로그로 오셔서 보세요.
변수
저번에는 그냥 Hell Hello world을 출력한 프로그램을 알아보았다.
이번에는 변수와 간단하게 printf문을 알아볼것이다.
일단 변수는 무엇일까?
네이버 국어사전에선
변수6變數[발음 : 변ː수] |
라고 한다.그럼 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가 생략되어있다.
그렇기때문에 변하지는 않다.
- 너도나도
- 2011/09/04 AM 12:05
- 파동함수의신
- 2011/09/04 AM 12:09
- 이뿌니~
- 2011/09/04 AM 12:19
- 이뿌니~
- 2011/09/04 AM 12:19
user error : Error. B.