컴퓨터 프로그램은 값을 저장하기 위하여 변수를 사용한다.
변수는 왜 필요할까 ??
사용자에게서 받는 데이터를 저장하는 장소다.
프로그램 코드에 직접 값을 넣는 것보다 변수를 사용한느 것이 프로그램을 유연하게 만든다.
변수와 상수의 차이
변수는 한번 값이 저장되어도 언제든지 다시 다른 값으로 변경이 가능하다.
상수는 프로그램이 실행되는 동안에 값이 변경되지 않는다.
변수와 상수의 공통점
컴퓨터는 계산을 하기 위해 모든 데이터가 메모리에 존재해야 한다.
변수와 상수 모두 메모리에 저장이 된다.
메모리에 저장 되기 때문에 자료형도 존재한다.
적절한 자료형을 사용해야만 메모리를 절약하면서 실행 속도를 빠르게 할 수 있다.
데이터의 종류를 자료형 또는 데이터 타입이라고 한다.
자료형의 크기
자료형의 크기를 알아보려면 sizeof 연산자를 사용하면 된다 .
unsigned vs signed
unsigned와 signed 키워드는 정수형 앞에 올 수 있다 .
unsigned 는 음수가 아닌 값만을 나타낸다는 것을 의미하고 signed는 반대로 음수도 가능하다는 것을 의미한다.
unsigned를 붙이면 음수가 제외도서 최상위 비트가 값을 나타내는 비트로 사용되어 더 넓은 범위의 양수를 나타낼수 있다.
printf() 이용해 unsigned형 변수 출력
unsigned int speed = 100;
printf(" %u " , speed);
%d를 사용해도 값이 작을 때는 올바르게 출력하는데 값이 커지면 음수로 출력된다.
unsigned 사용할거면 %u를 무조건 사용하자
오버플로우 (overflow)
정수형 변수가 나타낼 수 있는 정수의 범위가 제한되어 있기 때문에 산술 연산을 하는 경우, 결과가 정수형이 나타낼 수 있는 범위를 넘어갈 수도 있다.
ex) short형의 변수에 최댓값인 32767을 저장한 후에 1을 증가시키면 갑자기 -32768이 된다.
unsigned short형의 변수인 경우는 65535에서 0으로 넘어간다.
이런 경우를 오버플로우라고 하며 변수가 나타낼 수 있는 범위를 넘는 숫자를 저장하려고 할 때 발생힌다.
한계를 벗어나면 다시 처음으로 돌아가서 시작한다.
정수 상수
1 이나 100과 같이 숫자로 표현한다.
정수 상수는 기본적으로 int형으로 간주된다.
int 범위를 넘으면 컴파일러가 알아서 long형으로 취급한다.
만약 상수형의 자료형을 프로그래머가 지정하고 싶으면?
123L 처럼 정수 상수 뒤에 접미사로 L을 붙이면 123이라는 상수를 long형으로 간주한다.
정수 상수는 10진법뿐만 아니라 8진법이나 16진법으로도 표기가 가능하다.
8진법: 앞에 0을 붙이면 된다 . ex) 012 = 10
10진법: 0x를 붙이면 된다 . ex) 0xA =10 ----> 16진법에서 알파벳의 대소문자는 구분하지 않는다.
기호 상수
보통 상수에는 변수와는 달리 이름이 없다 . 그러나 상수에도 이름을 붙일 수 있는 방법이 있다.
기호 상수는 기호에 의하여 상수를 표현한 것이다.
won = 1120 * dollar; // (1) 실제의 값을 사용 (리터럴 상수)
won = EXCHANGE_RATE * dollar; (2) 기호상수 사용
기호 상수는 몇가지의 장점이 있다.
기호 상수를 사용하면 프로그램을 읽기가 쉬워진다는 것이다.
상수 값을 변경하려고 하는 경우에 , 쉽게 할 수 있다는 것이다.
ㄴ 그냥 리터럴 상수를 사용했다면 사용된 곳을 다 바꿔야 하지만 기호 상수를 사용했다면 기호 상수의 정의만 변경하면 된다.
// 기호 상수를 선언하는 방법 2가지
1️⃣ #define
#define EXCHANGE_RATE 1120
EXCHANGE_RATE라는 기호를 1120으로 정의한다는 의미이다.
#define이 들어가는 문장은 보통 컴파일러가 동작하기 전에 전처리기가 처리한다 .
전처리기는 소스에서 EXCHANGE_RATE를 모두 찾아서 1120으로 바꾼다.
🔴 일반적으로 기호 상수 이름은 다른 이름과 구별하기 위해 대문자로 만든다.
🟠 이 문장은 세미콜론으로 끝나지 않는다. 이것은 문장이 아니고 단순히 기호를 값으로 대체하라는 명령을 전처리기에 알려주는 역할만 하기 때문이다.
2️⃣ const 키워드 사용
const int EXCHANGE_RATE = 1120;
const를 변수 선언 앞에 붙이면 상수가 된다.