C언어

C언어 변수 선언

5_jinseok12 2018. 1. 2. 15:38
728x90

변수의 선언에 대해 알아보자

 

C언어에서 어떤 값을 주고 그 값을 나타내기 위해서는 데이터를 담을 상자 역할을 하는게 필요하다. 즉 자료를 메모리에 저장하기 위해 필요한 형태를 변수라고 한다.

 

변수 이름 설정

 

변수의 이름을 설정할 때에는 변수에 담고있는 혹은 변수에 담을 데이터와 연관있게 지어주는게 좋다. 예를들어 나이->age 이름->name 등..

변수의 역할을 가장 잘 설명하는 이름으로 하는것이 편하다

사실 변수의 이름을 설정하는데에는 조건은 없지만 아무거나 막 설정해놓으면 사용자가 나중에 헷갈리기 때문에 가능하면 연관있게 지어주는게 좋다.

 

또 대소문자를 구별한다. number와 Number은 완전히 다른 것이다

알파벳, 숫자, 밑줄문자(_)로만 구성되며(숫자로 시작하는것은 안된다),

num1은 사용가능하지만 1num은 사용할 수 없다. 또한 공백도 들어갈 수 없다

키워드 또한 변수의 이름으로 설정할 수 없다

(키워드란 list, if, else 등등..)

변수의 이름을 설정할 땐 위와 같은 주의사항만 지키면된다.

 

 

 

가장 많이 쓰이는 자료형 4가지

 

 

메모리라는 공간에서 프로그램이 작동하게 된다. 메모리는 컴퓨터 하드디스크에 하나 있다. 하나의 메모리를 여러 프로그램이 나눠쓰게 되는데 주소는 숫자형태로 나타낸다.

프로그램마다 필요로 하는 메모리의 크기가 다르다. 데이터의 크기단위가 바로 byte.

 

ex) int 자료형 5개를 만들 때 하나당 4byte이니까 총 20byte 만큼의 데이터를 요구하게 된다.

 

 

1byte = 8bit를 나타낸다. 즉 정수 자료형 4byte(32bit)

문자 자료형(char) 에서는 알파벳밖에 저장이 안된다.

알파벳은 한글자당 1byte를 나타내지만 한글은 한글자당 2byte를 나타낸다.

 

 

변수를 나타낼땐

 

int num;

num = 10;

 

변수이름 = 데이터;  로 나타낼 수 있다

 

 

변수의 초기화

위와 같이 변수에 바로 num 에 10을 저장할 수도 있다.

 

예를 들어 int num; 라고 저장을 해보자

데이터값을 따로 지정하지 않았기 때문에 num 안에는 쓰레기값이 들어가게 된다.

그래서 출력해보면 이상한 값이 나온다.

int num = 10; 이렇게 데이터 값을 지정해주면 그안에 쓰레기값이 없어지고 지정한 데이터 10이 들어가게 된다.

쓰레기 값을 지우고 내가 지정한 값을 넣어준다는 의미에서 초기화라는 단어를 사용한다, 그것을 변수의 초기화라고 한다.

 

 

여기서 주의사항은 변수의 선언(상자)를 만드는 것은 함수의 가장 첫 문장에서 선언해야 한다. java와 python등과 다른점이다. c언어의 단점이라고 할 수 있다

또 한 프로그램에 동일한 변수 이름으로 만들 수 없다, 이름이 같으면 구별할 수 없기 때문이다. 자료형이 다르다하더라도 마찬가지로 사용할 수 없다

 

 

정수

데이터 값은 덮어쓸 수 있기 때문에 언제든지 원하는 값으로 수정할 수 있다

int age = 16;  이런식으로 언제든지 수정 가능.

정수의 경우 첫번째 비트는 부호비트라고 한다. 즉 4byte라면 32bit 중 1bit는 부호비트(양수, 음수)로 빼놓고 나머지 31bit로만 숫자를 표현한다

이러한 방법을 2의 보수법이라고 한다.

 

큰 데이터 값을 지정해서 32byte를 넘어가면 데이터가 잘리고 이상한 값이 출력된다. 아래 사진을 보자.

 

 

 

위에 사진처럼 32byte를 넘어선 큰 숫자를 요구하게되면 컴퓨터는 알아서 나머지 숫자를 짜르고 이상한 숫자를 출력하게 된다.

 

 

 

이사진 또한 마찬가지이다.

 

 

 

 

실수

 

double 은 8byte이고 float는 4byte이기 때문에 double가 더 많은 범위를 저장한다고 생각할 수 있지만 그렇지 않다.

double보다 float가 더 많은 범위를 저장한다

왜그러냐하면 실수의 경우 .을 기준으로 가수와 지수로 구분을 하게 된다.

가수를 저장하는 부분과 지수를 저장하는 부분은 따로 있다.

예를 들어 3.1415922241253는 3보다 크고 4보다는 작다. 하지만 숫자는 많기 때문에 가수 부분에서는 3만 저장을 하고 나머지 뒤에 부분은 2진수로 바꿔서 저장을 하게 되는데 그러다보면 숫자가 짤리게 된다.

 

문자형 char 같은 겨우 크기는 1byte(8bit)를 나타낸다

단일 문자를 저장할 수 있다 저장할 땐 반드시  ' ' 가 필요하다

문자열 " " 은 저장할 수 없다.

 

이건 알맞는 자료형으로 출력한 결과 값이다

하지만 문자형에서 %c를 %d로 바꿨을 때와 실수 %g를 %d로 바꾸면 어떨까?

 

 

 

위와같이 real1의 값은 .점을 인식하지 못하여 가수와 지수의 구분이 없어지게 된다.

그렇기 때문에 엄청 큰 수로 인식을 하게 되는 것이고 32byte를 넘어서서 짤리고 오류가 나타나는 것이다

 

그다음 변수 ch 의 값은 A에서 65 로 바뀌었다. 아스키코드를 참고해보면 65는 A를 나타낸다. 즉 A라는 문자는 사실상 65라는 숫자의 형태이다.

 

반응형

'C언어' 카테고리의 다른 글

C언어 if 문  (0) 2018.01.08
C언어 입력함수 scanf  (0) 2018.01.05
C언어 배열과 입력함수  (0) 2018.01.05
C언어 변수와 연산자  (0) 2018.01.03
C언어 제어,변환문자  (0) 2017.12.29