4장: 자료형과 수식
Fundamental Data Types char, signed char, unsigned char 문자(character)를 저장 (signed) short (int), (signed) int, (signed) long (int) 부호있는 정수 unsigned short (int), unsigned (int), unsigned long (int) 부호없는 정수 float, double, long double 실수(부동(浮動)소수)
Bit and Byte in Computers 컴퓨터메모리의 최소기억단위 0 또는 1을 기억 Byte 컴퓨터메모리에서 주소지정의 최소단위 8비트
Characters in C ‘A’가 변수 tmp에 들어가는 과정은 다음과 같다. 메모리의 어딘가에 ‘A’가 저장되어 있다. char tmp; tmp = ‘A’; printf(“%c”, ‘A’); ‘A’가 변수 tmp에 들어가는 과정은 다음과 같다. 메모리의 어딘가에 ‘A’가 저장되어 있다. tmp도 메모리의 어떤 장소이다. ‘A’라는 값이 tmp에 들어간다. memory memory A tmp
Representations for Characters 65가 이진수로 메모리에 들어 있다. ASCII 코드 ‘B’ = 66, ‘C’ = 67,... ‘+’, ‘0’, ... 7비트 = 128개의 문자 표현가능
Character Type in C char 1바이트 = 8비트 ‘A’ = 65 = 10000012 char tmpchr = ‘A’; tmpchr in memory 1
Word in Computers 워드(Word) 컴퓨터가 한 번에 처리할 수 있는 비트의 크기 예) 32-bit word 1 32 bits 1 1 CPU 1 1 1
정수(int) 계열 Data Type int: 4 bytes(과거에 많이 쓰이던 워드) short(2 bytes) <= int <= long(4 bytes) type int로 표시가능한 값 00000000 00000000 00000000 00000000에서 11111111 11111111 11111111 11111111까지 232개의 서로 다른 값을 표현할 수 있다.
signed and unsigned unsigned 계열 (signed) int type의 변수가 가질 수 있는 값의 범위 unsigned short unsigned (int) unsigned long (signed) int type의 변수가 가질 수 있는 값의 범위 -231, -231 + 1, ..., -1, 0, 1, 2, ..., 231 – 1 -2,147,483,648 2,147,483,647 unsigned (int) type의 경우 0, 1, 2, 3, ..., 232 – 1 0 4,294,967,295
예제 프로그램 #include<stdio.h> int main(void) { int price; unsigned uprice; uprice = price = 2147483647; printf(“%d %u”, price, uprice); uprice = price = 4294967295; printf(“\n%d %u”, price, uprice); return 0; } -실행결과 2147483647 2147483647 -1 4294967295 데이터 타입이 가질 수 있는 최대값의 범위를 넘어가는 값을 할당해도 컴파일 에러는 나지 않는다.
ASCII 코드와 char - 실행결과 #include<stdio.h> int main(void) { A: 65 char alphabet; for(alphabet = ‘A’; alphabet <= ‘Z’; alphabet++) printf(“%c: %d\n”, alphabet, alphabet); return 0; } - 실행결과 A: 65 B: 66 C: 67 ... Z: 90 char 변수 alphabet에 ‘A’를 할당하면 alphabet 변수에는 65의 이진수 값이 들어간다. printf() 함수 안의 %c, %d는 단지 alphabet의 값을 출력하는 방법만 지정해 주는 것이다.
실수계열 Data Type float, double, long double 복잡한 실수의 계산은 정확하지 않다. float: 4 bytes double: 8 bytes long double >= double 복잡한 실수의 계산은 정확하지 않다. 간단한 경우에는 크게 문제가 되지 않는다.
자료형과 크기
sizeof 연산자(1/3) sizeof(object) object의 크기를 바이트 단위로 알려준다.
sizeof 연산자(2/3) #include<stdio.h> int main(void) { printf(“The size of some fundamental types is computed. \n\n”); printf(“ char:%3u byte \n”, sizeof(char)); printf(“ short:%3u bytes \n”, sizeof(short)); printf(“ int:%3u bytes \n”, sizeof(int)); printf(“ long:%3u bytes \n”, sizeof(long)); printf(“ unsigned:%3u bytes \n”, sizeof(unsigned)); printf(“ float:%3u bytes \n”, sizeof(float)); printf(“ double:%3u bytes \n”, sizeof(double)); printf(“long double:%3u bytes \n”, sizeof(long double)); return 0; }
sizeof 연산자(3/3) 실행결과
Keywords Keywords Keyword의 예 C언어에 미리 정의되어 있는 단어들 변수이름으로 사용할 수 없다. if, signed, int, float, for, while, ...
상수(Constants) 정수상수 실수상수 문자상수 1, 37, 74, ... 1.0, 37.0, 74.9, ... ‘A’, ‘b’, ‘0’, ‘+’, ... 문자상수는 프로그램에서 작은따옴표(‘’)로 묶인다. ‘0’은 문자상수, 0은 정수 상수이다.
문자열 상수(String Constants) 0개 이상의 문자(Character)로 이루어진다. “This is a string.”, “I am a boy.”, ... 문자열 상수는 프로그램에서 큰따옴표(“”)로 묶인다. “A”와 ‘A’는 서로 다르다.
연산자(Operators) 산술연산자(Arithmetic operators) 할당연산자(Assignment operators) +, -, *, /, %(나머지 연산자) 할당연산자(Assignment operators) =, +=, -=, *=, /=, %=, ... 증감연산자(Increment and decrement operators) ++, --
% 연산자 예제 프로그램 #include<stdio.h> int main(void) { int i; for(i = 1; i <= 100; i++) { if(i % 17 == 0) printf(“%d is a multiple of 17.\n”, i); } return 0;
실행결과
증감 연산자 예제 프로그램 증감연산자는 2가지의 형태로 쓰인다. 1. prefix 형: ++c 2. postfix 형: c++ #include<stdio.h> int main(void) { int a, b, c = 0; a = ++c; b = c++; printf(“%d %d %d\n”, a, b, ++c); return 0; } 증감연산자는 2가지의 형태로 쓰인다. 1. prefix 형: ++c 2. postfix 형: c++ 실행결과 1, 1, 3
관계연산자 (Relational and Equality Operators) Relational Operators <, >, <=, >= Equality Operators ==(equal to), !=(not equal to)
Operator Precedence and Associativity 연산의 순서 Associativity 연산의 방향 C 언어는 모든 연산자들의 우선순위 및 associativity를 정해 놓고 있다. 계산순서를 확실히 하려면 괄호를 사용하라.
Operator Association Rule
할당 연산자 (Assignment Operators) 할당연산자 =, +=, -=, *=, ... += a = a + 1은 a += 1과 동등한 표현이다. *= a = a * 1은 a *= 1과 동등하다.
수식(Expressions) C에서 수식은 상수(constant), 변수(variable), 연산자(operator)들로 구성된다. 3 정수 상수 수식 3 + sum 3: 정수상수, +: 연산자, sum: 변수 ‘A’ 문자(character) 상수 수식 “This is a string!” 문자열(string) 상수 수식
수식의 값 C의 모든 수식은 값을 가진다. 수식의 값은 그 수식이 계산된 결과이다. 수식 a + 1의 값은? a에 3보다 큰 값이 들어 있는 경우 이 수식의 값은 1(참, TRUE)이다. a에 3보다 작거나 같은 값이 들어 있는 경우 이 수식의 값은 0(거짓, FALSE)이다.
관계 수식의 값 예제 프로그램 -실행결과 1 1 3 1 #include<stdio.h> int main(void) { int a, b, c = 0; a = ++c; b = c++; printf(“%d %d %d\n”, a, b, ++c); printf(“%d\n”, a > 3); printf(“%d\n”, a <= 3); return 0; } -실행결과 1 1 3 1
할당 수식의 값 할당 수식의 값은 왼쪽의 변수에 저장된 값이다. a = 1의 값은 1 b = 0의 값은 0 c = 34의 값은 34
할당수식의 값 예제 프로그램 j = 0 수식의 값 : 0 if의 조건식은 항상 0(False)이다. #include<stdio.h> int main(void) { int i, j; scanf(“%d”, &i); j = i % 2; if(j = 0) printf(“This number is even.\n”); else printf(“This number is odd.\n”); return 0; } j = 0 수식의 값 : 0 if의 조건식은 항상 0(False)이다.