Declaration, Expression, Assignment
Declarations 선언
변수 Variables와 상수 constants는 반드시 사용되기 전에 선언되어야 한다.
선언에서는 [1] 변수와 type을 연결짓고
[2] 컴파일러로 하여금 특정한 양의 메모리를 잡아두도록 한다.
#include <stdio.h>
int main(void){
int a, b, c;
float x, y = 3.3, z = -7.7;
printf("Input two integers: ");
scanf("%d%d", &b, &c);
a = b+c;
x = y+z;
}
Expressions
함수, 변수, 연산자, 상수 등을 조합하여 만들어진다.
assignment statement
variable = expression;
기본적인 데이터 타입 Data Types
기능에 따라서 분류해보면,
정수형 :
[1] char signed char unsigned char
[2] short int long
[3] unsigned short unsigned unsigned long
실수형 :
float double long double
Char
char 타입은 작은 정수를 담을 수 있다.
1 byte 메모리 영역을 할당받게 됨
char에는 문자, 숫자, 특수문자, 문장기호 등이 포함된다.
ASCII charactor code를 이용하면,
character constant를 대응하는 정수 값으로 표현할 수 있다.
(예를 들면, 'a' == 97)
프린트하기 어려운 character 같은 경우에는, \ 기호를 이용해서 표현한다.
\(backslash character)는 escape character라고 부르는데,
\를 이용하면, 본래 의미에서 탈출(escape)해서 새로운 character를 표현할 수 있다.
가장 자주 사용하는 경우는 \n(newline) \0(null character) \"(double quote) \' (single quote)가 있다.
이외에도
alert : \a (작은 종소리를 들리게 함)
backslash : \\ (\ 출력)
character를 integer처럼 취급할 수 있다. char c = 'a';
#include <stdio.h>
int main(void){
char c = 'a';
printf("%c", c);
printf("%d", c);
printf("%c%c%c", c, c+1, c+2);
char c;
int i;
for (i='a';i<='z';++i){
printf("%c", i);
}
for (c='0';c<='9';++c){
printf("%d", c);
}
return 0;
}
char c = 'a';
는 1byte 메모리에 01100001(97)과 같이 저장된다.
이때 type char는 1byte이므로 256개의 값을 표현할 수 있는데,
signed char는 부호가 있는 것이므로 -128부터 127까지
unsigned char는 부호가 없는 것이므로 0부터 255까지 표현해낸다.
Int
'근-본'이 되는 데이터 타입
2 byte나 4byte에 저장된다. (64 bit OS의 경우 4 혹은 8 바이트)
따라서 2^(8*sizeof(int)) 만큼의 값을 표현해낼 수 있다.
Short, Long, Unsigned
type int가 기본이지만, char, short, long도 특수한 목적을 위해 사용될 수 있다.
short : 2 bytes (메모리 부족한 경우)
long : 4/8 bytes (큰 정수를 취급해야 하는 경우)
바이트 수는 short <= int <= long 의 관계를 가지고 있다.
int와 unsigned는 machine WORD에 저장된다.
이때 WORD는 데이터 단위로, 기계어 명령이나 연산을 통해 저장된 장치로부터
레지스터에 옮겨놓을 수 있는 데이터 단위를 의미한다.
integer 뒤에 접미사를 붙여서 타입을 특정해줄 수 있다.
37 : default int
37U : unsigned integer
27L : long integer
37UL : unsigned long integer
Floating type
float, double, long double
실수형
double
int
typedef
type과 identifier를 연결지을 수 있다.
실제 사용법과 유사한 명칭을 지을 수 있다.
typedef char uppercase;
typedef int INCHES, FEET;
typedef unsigned long size_t;
sizeof
sizeof(object) object 에는 int, float, a+b 등등 다양하게 들어갈 수 있다. 함수가 아니라 연산자임 (unsigned)
getchar(), putchar()
해당 매크로는 stdio.h에 포함되어있다.
getchar() : scanf랑 비슷함
putchar() : printf랑 비슷함
#include <stdio.h>
int main(void){
int c;
while((c=getchar())!=EOF){
putchar(c);
putchar(c);
}
return 0;
}
파일 입출력에서 종종 사용하는 EOF는
End Of File의 약자다.
파일의 끝을 표기하는데,
stdio.h 헤더 파일에서는 EOF를
#define EOF (-1)과 같이 정의한다.
(c=getchar())!=EOF 표현은 기억해두자.
#include <stdio.h>
int main(void){
int c;
while ((c=getchar())!=EOF){
if (c>='a'&&c<='z'){
putchar(c+'A'-'a');
}
else
putchar(c);
}
return 0;
}
assignment conversions
assignment에서 발생하는 형 변환에 대해 알아보자.
오른쪽이 왼쪽으로 형 변환된다.
[1] float = double
(반올림되거나 버림 처리됨)
[2] int = float
(float의 소수점 이하를 버림)
[3] long int = short int
(큰 bit 영역을 버림)
usual arithmetic conversions
conversions and casts
[1] widening
[2] Narrowing : loss of information
사례 1. (char) - (short) / (int) = int
사례 2. (unsigned) * (float) - (int) = double
사례 3. char + int = int
사례 4. char + double = double
사례 5. double + short = double
사례 6. int * int / long = long
사례 7. unsigned * int - int = unsigned
사례 8. float * 7 - int = float
사례 9. int * signed * unsigned long = unsigned long
사례 10. long double + char = long double
사례 11. unsigned - unsigned long = unsigned long
사례 12. unsigned - long = system-dependent
캐스트 casts
명시적으로 형 변환을 해준다 (int) identifier
cast 연산자는 단항 연산자이다(unary operator)
Hexadecimal and octal constants
Octal constants
앞에 0을 붙인다?
%o
Hexadecimal Constants
앞에 0x를 붙인다?
%x
#include <stdlib.h>//표준 라이브러리 헤더 파일
#include <stdio.h> //표준 입출력 헤더 파일
int main()//프로그램 진입점
{
//16진수 0x12345678
//0001 0010 0011 0100 0101 0110 0111 1000
//10진수 출력
printf("%d\n", 10);
printf("%d\n", 010);//8진수 10(8진수) = 8+0 = 8
printf("%d\n", 0x10);//16진수 10(16진수)16+0 = 16
//8진수 출력
printf("%#o\n", 10);//8+2 =>12(8진수)
printf("%#o\n", 010);//10
printf("%#o\n", 0x10);//16진수 10(16진수)16+0 = 16 =>20(8진수)
//16진수 출력
printf("%#x\n", 10); //a
printf("%#x\n", 010);//8
printf("%#x\n", 0x10);//10
system("pause");
return 0;
}
'Computer Science > C' 카테고리의 다른 글
C언어 6강 | Arrays, Pointers, and Strings | 중요! (0) | 2021.12.16 |
---|---|
C언어 4강 | Flow of Control | 반복문, 조건문, 순차 구조 (0) | 2021.12.16 |
C언어 2강 | 어휘 요소와 연산자 Lexical Elements & Operators (0) | 2021.12.15 |
C 언어 1강 | 알고리즘 사고, C 언어 역사, Hello World! (0) | 2021.12.14 |
[6.27] C언어 복습 + 예습 (0) | 2021.06.27 |