/C
📌 변수
- 변수란 데이터를 저장할 수 있는 메모리 공간을 의미하며, 정수형(char, int, long)과 실수형(float, double), 포인터 변수, 사용자 정의 구조체 변수가 있다.
- 변수의 이름은 숫자, 언더스코어(_), 영문 대소문자로만 지을 수 있으며 숫자로 시작할 순 없다. 또한 C에서 사용되는 예약어를 변수로 사용할 수 없음에 유의해야 한다.
- 비트는 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이며(0, 1을 저장하는 이진수 값), 바이트는 비트가 8개 모인 구조로 한 문자를 표현한다.
- 변수는 메모리 주소를 기억하는 역할을 담당한다. 메모리 주소는 메모리 공간에서의 정확한 위치를 식별하게 한다. 따라서 변수를 참조한다는 것은, 메모리 주소에 저장된 데이터를 참조한다는 것이다. (메모리 주소 참조 X) 변수는 저장된 데이터 타입과 길이도 기억해야 한다.
- 변수를 선언하는 방법은 두 가지가 있다.
- 변수의 선언만 하기: 초기엔 의미 없는 값이 들어있으므로 초기화 후 사용해야 함
//타입 변수이름;
int num1;
- 선언과 동시에 초기화하기: 타입이 같은 경우 여러 개를 동시에 선언할 수 있다
//타입 변수이름 = 초기값;
int num1 = 36;
char text1 = 'a', text2 = 'b';
📌 상수
- 상수 또한 변수와 마찬가지로 메모리 공간을 의미한다. 단, 변수와는 다르게 한 번 선언하면 변경할 수 없다. 리터럴 상수와 심볼릭 상수가 있다.
- 리터럴 상수: 변수와는 다르게 메모리 공간을 기리키는 이름이 없다.
- 정수 리터럴: 123, -456
- 실수 리터럴: 31.5, -19.19
- 문자형 리터럴: 'a', 'O'
- 심볼릭 상수: 변수와 마찬가지로 메모리 공간을 가리키는 이름이 있다. 때문에 선언과 동시에 반드시 초기화해야 한다. const를 이용하는 것과 매크로를 이용하는 것 두 가지 방법이 있다.
const int MAX = 10;
//const 이용 선언
#define MIN = 7;
//매크로 이용 선언
📌 기본 타입
- 정수형, 실수형, 문자형이 있다.
- 정수형: 부호가 있고, 소수 부분은 없는 타입. unsigned 키워드를 사용하면 0 포함 양의 정수를 나타내는 데 쓸 수 있는 최상위 비트(MSB)를 사용할 수 있다. 이 경우 signed의 두 배 분량의 양의 정수를 나타낼 수 있다. 키워드를 지정하지 않으면 signed가 디폴트로 사용된다. short, int, long이 있고 각각 2, 4, 4바이트의 크기를 갖는다. 이를 벗어나면 overflow가 발생할 수 있으니 주의해야 한다.
- overflow발생시 인접한 비트를 덮어써서 잘못된 결과가 나타날 수도 있다. 또한 int는 내부적으로 가장 빠르게 처리 가능하기에 가장 많이 사용하는 타입이다.
- 실수형: 컴퓨터에서는 반드시 오차가 발생할 수 밖에 없는 타입이다. float, double, long double이 있으며 각각 4, 8, 8바이트의 크기를 갖는다. float의 경우 소수점 6자리까지, double의 경우는 소수점 15자리까지 유효하며 그 밑으로는 틀린 값이 저장될 수도 있다. 현재는 double를 많이 사용하는 편이다.
- 문자형: 문자를 숫자에 대응하여 사용한다. 가장 많이 사용하는 것이 아스키코드.
char ch = 'a';
printf("변수 ch에 저장된 값은 %c입니다.\n", ch);
printf("변수 ch에 저장된 값은 %d입니다.\n", ch);
//변수 ch에 저장된 값은 a입니다.
//변수 ch에 저장된 값은 97입니다.
//즉 문자 a가 내부적으로는 97로 저장되어 있다는 이야기.
📌 타입 변환
- 하나의 타입을 말 그대로 다른 타입으로 변환하는 것을 의미한다. 다만 넓은 범위의 타입에서 좁은 범위의 타입으로 변환 시 데이터 손실이 발생할 수 있다.
- 묵시적 타입 변환(자동 타입 변환): C compiler가 자동적으로 타입을 변환하는 것을 의미한다.
- 대입연산: 오른쪽에 있는 데이터의 타입이 왼쪽에 있는 데이터의 타입으로 변환된다.
- 산술연산: 데이터 손실을 최소화하는 방향으로 타입이 변환된다. 때문에 이러한 순서대로 타입이 변환된다. char 형 → short 형 → int 형 → long 형 → float 형 → double 형 → long double 형
- 명시적 타입 변환: 타입캐스트 연산자()를 활용하여 타입을 변환한다. 변환하고자 하는 타입을 연산자 안에 적어주면 된다.
double num02 = (double)num01/num03