본문 바로가기
언어/C언어

[C 언어] 5. 변수와 자료형(더 자세히1)

by 천무지 2024. 4. 14.
반응형

저번에는 변수와 자료형을 간단히 알아봤는데 오늘은 더 자세히 알아볼 겁니다.

 

변수를 사용하는 이유는 직접 값을 넣는것 보다 변수를 사용하는게 프로그램을 더 유연(?) 하게 짤 수 있기 때문입니다.

 

그리고 변수는 실행 도중에 값을 바꿀 수 있지만 상수는 그렇지 않습니다.

 

자료형은 signed 와 unsigned로 구분할 수 있습니다.

 

우리가 지금까지 int float 이렇게 쓴 것들은 모두 signed 된 자료형입니다.

 

기본적으로 signed가 있는걸로 쳐서 굳이 쓰지 않았던 겁니다.

 

자료형 비트 범위
정수형 short 부호 있는 정수 16  -32768 ~ 32767
int 32 -2147483648 ~ -2147483647
long -2147483648 ~ -2147483647
long long 64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned short 부호 없는 정수 16 0 ~ 65535
unsigned int 32 0 ~ 4294967295
unsigned long 0 ~ 4294967295
unsigned long  16 0 ~ 18,446,744,073,709,551,615

 

signed 는 음수까지 나타내고, unsigned는 0과 양수만 나타냅니다.

 

그리고 그냥 넘어갈 수도 있지만 살펴보면 2의 16승은 65536 입니다. 근데 왜 short의 최대 양수값은 절반 정도 밖에 나오지 않았을까요.

 

이유는 16비트 중 1비트는 부호를 결정해주기 때문입니다. 그래서 2의 15승인 32768가지가 표현 된 겁니다. (0포함해서 32768)

 

하지만 아래의 unsigned들은 부호가 모두 없기 때문에 2의 16승이면 그대로 표현 된겁니다.

 

표에 있는 더러운 숫자들은 그냥 범위니까 넘어가세요.

 

 

 

인제 오버플로우라는 것에 대해 알아보겠습니다.

 

 

이걸 실행 시키면

 

 

이렇게 뜰겁니다.

 

#include <limits.h> 는 정수형을 나타내는 상수들을 정의합니다.

 

s_money = s_money + 1; 는 s_money를 1증가 시킨다는 뜻입니다.

 

그래서 s_money는 32767에서 1증가해 32768 이 되어야 하는데 -32768이 되었습니다.

 

값을 담을수 있는 범위에서 벗어난게 오버플로우 입니다.

 

short값의 범위는 -32768 ~ 32767 인데 최대인 상태에서 1을 증가시킨겁니다.

 

그래서 다시 처음으로 돌아가 가장 작은 값인 -32768 이 된겁니다.

 

사이클 돌아요.

 

u_money도 똑같습니다.

 

 

 

다음은 기호상수

 

호상수는 말그대로 기호를 상수로 표현한 것입니다.

 

기호상수의 장점은 프로그램 읽기가 쉬워지고 쉽게 값을 변경할 수 있다는 것입니다.

 

기호상수를 선언하는 방법은 두 가지가 있습니다.

 

1.

#define EXCHANGE_RATE 1120

               기호상수         값

 

이렇게 하면 프로그램안에있는 모든 EXCHANGE_RATE는 1120이라는 값을 가지게 됩니다.

 

등호 쓰면 안됩니다.

 

2.

const int EXCHANGE_RATE = 1120;

                기호상수             값

 

변수 선언 앞에 const를 붙이면 상수가 됩니다. 선언 할 때 const를 붙이면 초기화를 하고 그 값을 절대로 못 바꿉니다.

 

예를 들어서

 

const int EXCHANGE_RATE;

EXCHANGE_RATE = 1120;

 

이런게 안됩니다.

 

선언 할때 값을 같이 넣어주어야 합니다.

 

 

 

 

 

 

 

여기까지 할게요.

반응형