네트워크 보안

Download Report

Transcript 네트워크 보안

Chapter 3
변수와 자료형
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
목차
3.1 변수
3.2 자료형
3.3 변수의 이름 짓기
3.4 변수 선언과 사용
3.5 정수형
3.6 부동소수점형
3.7 문자형
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.1 변수
 변수 (variable)란?
 프로그램에서 일시적으로 데이터를 저장하는 공간
 변수는 왜 필요한가?
 데이터가 입력되면 어딘가에 저장해야만 사용할 수 있음
성적들의 평균이 구해
지려면 먼저 어딘가에
저장되어 있어야 함
평균
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.1.1 변수가 만들어지는 곳
 변수는 메인 메모리에 만들어짐
 변수 = 상자
int
데이터
변수의 타입
Http://netwk.hannam.ac.kr
변수의 이름
HANNAM UNIVERSITY
3.1.2 변수가 필요한 이유
 만약 메모리를 이름을 갖지 않은 채로 사용한다면
 충분히 가능하지만 불편함, 인간은 숫자보다 기호를 더 잘 기억
2
219번지
219번지에 2를 대입
VS
2
A
A에 2를 대입
…
…
 저장해야 할 변수가 매우 많다면 메모리 번지수를 모두 기억하기는
어려움
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.1.3 변수와 상수
 변수와 상수
 변수 한번 값이 저장 되었어도 언제나 다른 값으로 변경 가능
 상수 한번 값이 저장 되면 값을 변경이 불가능 (예 : 원주율, A등)
변수
Http://netwk.hannam.ac.kr
상수
HANNAM UNIVERSITY
3.1.4 예제 circle_area.c
예제
결과
 원의 넓이를 구하는 방법
변수 부분
상수 부분
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.2 자료형
 자료형이란?
 데이터의 종류와 크기에 따라서 변수의 종류를 다르게 하는 것이 메
모리를 효율적으로 사용할 수 있음
 데이터 타입이라고 말하며 크게 정수형, 문자형, 부동소수점형 3가지로 나
눌 수 있음
 일단 특정한 자료형으로 생산되면 해당되는 종류의 데이터만 저장할
수 있음 예를 들어 int형에는 정수형 데이터만 저장이 가능
물건이 상자보다 크면
들어가지 않음
물건이 상자보다 너무 작으면
공간이 낭비 됨
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.2.1 기본자료형
자료형
바이트
범위
short
short형 정수
2
-32768~32767
int
정수
4
-2147483648~2147483647
long
long형 정수
4
-2147483648~2147483647
unsigned
short
부호없는 short형 정수
2
0~65535
unsigned
int
부호없는 정수
4
0~4294967295
unsigned
long
부호없는 long형 정수
4
0~4294967295
부호있음
char
문자 및 정수
1
-128~127
부호없음
unsigned
char
문자 및 부호없는 정수
1
0~255
float
단일정밀도 부동소수점
4
1.2E-38~3.4E38
double
두배정밀도 부동소수점
8
2.2E-308~1.8E308
부호있음
정수형
부호없음
문자형
설명
부동소수점형
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.2.2 자료형의 크기
 자료형의 크기를 알고 싶을 땐 sizeof 연산자 이용하여
자료형의 크기를 알아낼 수 있음
형식
sizeof(변수 or 자료형)
예
sizeof(x)
sizeof(10)
sizeof(int)
sizeof(double)
Http://netwk.hannam.ac.kr
변수
값
자료형
자료형
HANNAM UNIVERSITY
3.2.3 예제 sizeof.c
예제
결과
 sizeof함수를 이용하여
각 자료형의 크기 구하기
sizeof 함수사용
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.3 변수의 이름 짓기
 변수의 이름이나 함수의 이름은 모두 식별자의 일종임
 식별자란?(identifier)
 다른 함수와 다른 변수들과 식별할 수 있게 해주는 것
 변수의 이름은 프로그래머가 마음대로 지을 수 있지만 몇
가지 규칙을 지켜야 함
 알파벳 문자와 숫자, 밑줄 문자 ‘_’로 이루어져야 함 한글은 사용 불
가능
 이름에 중간에 공백이 들어가면 안 됨
 이름의 첫 번째 문자는 반드시 알파벳 또는 밑줄 문자 ‘_’ 이어야 하
고
숫자로 시작할 수 없음
 대문자와 소문자를 구별해야 함
예를 들어, 변수 index와 INDEX는 다른 변수 취급함
Http://netwk.hannam.ac.kr
 C언어에서
사용하고 있는 키워드와 똑같은 이름은HANNAM
쓸 수 UNIVERSITY
없음
3.3.1 식별자
■사용할 수 있는 식별자 인가?
sum
: 사용 가능한 식별자
3_base
: 사용불가능 숫자로 시작할 수 없음
_count
: 사용 가능한 식별자
double
: 사용불가능 C언어의 키워드
number_of_pictures
: 사용 가능한 식별자
money#
: 사용불가능 기호사용 할 수 없음
King3
: 사용 가능한 식별자
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.3.2 키워드
 키워드란 C언어에서 고유한 의미를 가지고 있는 특별한
단어 이고 사용자가 다시 정의하거나 사용 하는 것이
금지되어 있기에 식별자로 사용 불가능 하며 다른 말로
예약어라고 함
키워드 목록
auto
double
int
struct
break
else
long
switch
case
enum
register
char
extern
typedef
return
union
const
float
short
unsigned
continue
for
signed
void
default
goto
sizeof
volatile
do
Http://netwk.hannam.ac.kr
if
static
while
HANNAM
UNIVERSITY
3.4 변수 선언
 변수 선언이란
 컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는 것
 변수 선언 방법
 자료형 변수명 ;
 변수 선언의 예
 char s;
 int ab;
 float x;
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.4.1 변수에 값을 저장
 변수는 데이터를 저장하기 위한 공간인데 변수를 선언하면
공간이 생기고 그 공간에 값을 넣기 위해서는 대입연산자
『 = 』를 사용함
 `변수에 값을 저장하는 예
char c;
int i;
double interest_rate;
c = 'a';
`
i = 60;
interest_rate = 4.9;
Http://netwk.hannam.ac.kr
//
//
//
//
//
//
문자형
정수형
실수형
문자형
정수형
실수형
변수
변수
변수
변수
변수
변수
c 선언
i 선언
interest_rate 선언
c에 문자 'a'를 대입
i에 60을 대입
interest_rate에 4.9를 대입
HANNAM UNIVERSITY
3.4.2 변수의 초기화
 변수의 초기화
자료형
변수이름 = 초기값;
 변수를 초기화 하는 이유
 변수 선언 할 때 초기화 하지 않은 경우 변수에는 아무 의미 없는
쓰레기값이 들어감
 변수 초기화 예
char c = ‘a’;
int i
= 7;
double interest_rate = 0.05;
 변수 선언과 동시에 초기화하는 것은 선언한 후에 값을 대입하는 것
과 동일
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.4.3 변수선언 위치
 변수 선언은 시작 부분에 선언 되어야 하며, 시작 부분이
아닌 경우 C에서는 컴파일 오류가 발생
 변수 선언의 예
int main(void)
{
int count = 0;
int index;
count = 10;
index = 1;
int sum;
...
}
Http://netwk.hannam.ac.kr
변수선언
일반문장
잘못된 변수선언
컴파일 오류 발생
HANNAM UNIVERSITY
3.4.4 변수의 사용
 대입 연산자를 이용하여서 값을 저장 하며 값은
언제든 변경이 가능
int value;
value = 10;
…
value = 20;
//대입 연산자를 이용하여 value에 10을 저장
// 변수 value의 값을 20으로 변경
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.4.4 변수의 사용
 변수에는 다른 변수의 값을 할당할 수 있음
int value1 = 10;
Int value2;
value2 = value1;
// 변수 value2의 값을 value1 값으로 변경
value2 = value1;
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.4.5 예제 dollar2won.c
 달러화를 원화로 계산하는 프로그램
예제
결과
변수 선언
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5 정수형
 정수형 데이터 타입
 short, int, long 형이 있고 여러 개의 정수형 데이터 타입이 필요한
이유는 용도에 따라 프로그래머가 선택하여 사용할 수 있게 하기 위
해 만들어짐
 정수형의 범위
 short형은 16비트 크기를 가지며 -32768~32767까지의 숫자를 표
현 가능
 int 형은 cpu의 크기와 관련되어있고 현재는 보통 32비트 크기를 가
지며 –2147483648 ~ 2147483647까지 숫자를 표현 가능
 long 형은 32비트 크기를 가지며 int형 (32비트) 경우와 같은 숫자를
표현이 가능
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.1 정수형 예제 integer.c
 정수형 자료형의 크기를 계산하는 프로그램
결과
예제
변수 초기화
sizeof 함수사용
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.2 signed, unsigned 수식자
 unsigned
 음수가 아닌 값을 가진다는 의미 양수로만 따진다면 2배의 정수를
표현
가능
 short 형은 0~65535 까지 int형과 long형은 약 42억까지의 숫자를
표현 가능
 signed는 unsigned와 반대로 자료형이 음수도 가질 수 도 있다고 명
백히 하는데 사용되며 흔히 생략이 가능
 signed int와 int는 같은 의미
 예를 들어
 unsigned int speed;
//부호없는 int형
 unsigned distance;
//unsigned int distance와 같은 의미
 signed int;
// int와 동일
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.3 오버플로
 오버플로(overflow): 변수가 나타낼 수 있는 범위를 넘는 숫
자를 저장하려고 할 때 발생
 정수형에서 오버플로 발생하더라도 컴파일러는 아무런 경고를 하지
않기 때문에 부정확한 결과가 계산되므로 주의 해야 함
 오버플로가 발생할 경우 규칙성이 있음
 오버플로가 발생 하면 처음으로 되돌아감
 수도 계량기나 주행거리계와 비슷하게 동작
Int의
경우
i
Unsignd-Int의 경우
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.4 예제 overflow.c
 Unsigned short과 short형의 오버플로
예제
결과
각 자료형이 가질 수 있는
최대값을 입력
가질 수 있는 최대값에서 1을
더하므로 오버플로우 발생
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.5 정수 상수
 정수 상수란 정수형태를 가지는 상수
 정수상수는 기본적으로 int형으로 간주 함
 상수의 자료형을 명시 하려면
접미사
자료형
예
u 또는 U
unsigned int
123u 또는 123U
l 또는 L
long
123l 또는 123L
ul 또는 UL
unsigned long
123ul 또는 123UL
 10진법 이외의 진법으로도 표기 가능
 앞에 0을 붙이는 경우는 8진수 0x를 붙이는 경우는 16진수
int x = 10; // 10은 10진수이고 int형이고 값은 십진수로 10
int y = 010; // 010은 8진수이고 int형이고 값은 십진수로 8
int z = 0x10; // 010은 16진수이고 int형이고 값은 십진수로 16
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.6 예제 int_const.c
예제
결과
앞에 0으로 시작하면 8진수
0x로시작하면 16진수
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.7 기호상수
 기호 상수 (symbolic constant)란?
 기호를 이용하여 상수를 표현한 것
 보통의 상수는 변수와는 달리 이름이 없는데 상수에 이름을 붙이는
방법
 기호 상수를 사용할 경우 가독성이 높아지고 값을 쉽게 변경 할 수
있음
 기호 상수의 예
 area = 3.141592 * radius * radius;
 area = PI * radius * radius;
 income = salary - 0.15 * salary;
 income = salary - TAX_RATE * salary;
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.8 기호 상수의 장점
리터럴 상수를 사용하는 경우
등장하는 모든 곳을 수정해야 함
Http://netwk.hannam.ac.kr
기호 상수를 사용할 경우
기호상수가 정의된 곳만 수정하면 됨
HANNAM UNIVERSITY
3.5.9 기호 상수를 만드는 방법
 define 문장 사용
결과
예제
기호상수선언
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.5.10 기호 상수를 만드는 방법
 const 키워드사용
결과
예제
기호상수선언
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.6 부동소수점형
 실수를 표현하는 방법에는 크게 고정소수점형,부동소수점형
두 가지 방법이 존재
 고정소수점은 간단하고 알기 쉽다는 장점이 있지만 과학과
공학에서 필요한 매우 큰 수를 표현 할 수 없는 단점이 있음
 부동소수점은 고정소수점의 단점을 보안 하기 위해
만들어짐
 현재 컴퓨터에서는 부동소수점 방식을 사용
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.6.1 실수를 표현하는 방법
 고정 소수점 방식
 정수 부분을 위하여 일정 비트를 할당하고 소수 부분을 위하여 일정
비트를 할당
 전체가 32비트이면 정수 부분 16비트, 소수 부분 16비트 할당
 과학과 공학에서 필요한 아주 큰 수를 표현할 수 없음
정수부분
Http://netwk.hannam.ac.kr
소수부분
HANNAM UNIVERSITY
3.6.1 실수를 표현하는 방법
 부동 소수점 방식
 고정소수점방식의 단점을 보안하기 위해 만들어짐
 표현할 수 있는 범위가 대폭 늘어남
 10-38 에서 10+38
실수의 정밀도를 나타냄
가수부분
실수의 표현범위를 나타
냄
지수부분
부호 부분 (1비트)
가수부분(23비트)
Http://netwk.hannam.ac.kr
지수부분(8비트)
HANNAM UNIVERSITY
3.6.2 부동 소수점의 자료형
자료형
명칭
크기
float
단일정밀도
(single-precision)
부동소수점
32비트
±1.17549 X 10-38
~
±3.40282 X 10+38
double
두배정밀도
(double-precision)
부동소수점
64비트
±2.22507 X 10-308
~
±1.79769 X 10+308
long double
두배확장정밀도
64비트
(double-extension-precision) 또는
부동소수점
80비트
±2.22507 X 10-308
~
±1.79769 X 10+308
Http://netwk.hannam.ac.kr
범위
HANNAM UNIVERSITY
3.6.3 부동 소수점 상수
 일반적인 실수 표기법
 3.141592(double형)
 3.141592F(float형)
 지수표기법
 1.23456e4 = 12345.6
 1.23456e-3 = 0.00123456
 유효한 표기법의 예
 1.23456
 2.
// 소수점만 붙여도 가능
 .28
// 정수부가 없어도 가능
 0e0
 2e+10
// +나 -기호를 지수부에 붙일 수 있음
 9.26E3 //
 9.26e3 //
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.6.3 예제 floating.c
예제
결과
 유효숫자 개념을 알아보기 위한 예제
Float형은 6개 정도의 유효숫자를 가질 수 있으므로
8번째 자리수 부 터 정확한 값이 않나 옴
Double형은 15자리 정도의 유효숫자를 가질 수 있음
%30.25는 전체 출력필드의
크기를 30을하고
소수부분을 25자리 출력하라는 의미
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.6.3 예제 over_under.c`
결과
예제
숫자가 너무 커서
오버플로 발생
숫자가 너무 작아
언더플로 발생
Http://netwk.hannam.ac.kr
부동소수점의 경우 오버플로 발생시
변수에 무한대를 의미하는 INF를 출력
Y를 출력하는데 언더플로가
발생 0으로 출력
HANNAM UNIVERSITY
3.6.3 예제 error.c
 오차가 있을 수 있다!
예제
결과
1.0e20+5의 값이100000000000000005가 나오는데
이 숫자를 정확하게 저장 시키려면 20개의 유효숫자가
필요하지만 double형이라도 최대 16개의 유효 숫자만
지원하기에 1.0e20+5가10e20으로 저장하게 되면서
연산결과가 0이 나옴
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.7 문자형
 문자는 컴퓨터보다는 인간에게 중요
 컴퓨터에서는 모든 것을 숫자로 표현 문자도 숫자를
이용하여 표현
 문자를 숫자로 표현하는데 공통적인 규격이 필요해서
제작되어진 것 이 아스키 코드(ASCII: American
Standard Code for Information Interchange)임
 8비트를 사용하여 영어 알파벳 표현
 (예) !는 33, ‘A’는 65, ‘B’는 66, ‘a’는 97, ‘b’는 98
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.7.1 문자변수
 char형의 변수가 문자 저장
char c;
char answer;
char code;
 char형의 변수에 문자를 저장할 땐 아스키 코드 값을 대입
code = 65;
code = ‘A’;
Http://netwk.hannam.ac.kr
// ‘A’ 저장
HANNAM UNIVERSITY
3.7.1 예제 char_var.c
 문자 변수를 입력해보자
예제
Http://netwk.hannam.ac.kr
결과
HANNAM UNIVERSITY
3.7.1 예제 char_var1.c
 문자 변수와 아스키 코드와의 관계
예제
결과
' ' 를 사용하지 않을 경우 A를
변수이름으로 생각하여 오류가 발생
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.7.2 제어문자
 제어문자란?
 인쇄 목적이 아니라 제어 목적으로 사용되는 문자들
 (예) 줄 바꿈 문자, 탭 문자, 벨 소리 문자, 백스페이스 문자
 제어 문자를 나타내는 방법
 아스키 코드를 직접 사용
char beep = 7;
printf("%c", beep);
 이스케이프 시퀀스 사용
char beep = ‘\a’;
printf("%c", beep);
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.7.3 이스케이프 시퀀스
제어 문자 이름
제어
문자
표기
값
의미
널문자
\0
0
문자열의 끝을 표시
경고(bell)
\a
7
"삐“하는 경고 벨 소리 발생
백스페이스(backspace)
\b
8
커서를 현재의 위치에서 한 글자 뒤로 옮김
수평탭(horizontal tab)
\t
9
커서의 위치를 현재 라인에서 설정된 다음 탭 위치로 옮김
줄바꿈(newline)
\n
10
커서를 다음 라인의 시작 위치로 옮김
수직탭(vertical tab)
\v
11
설정되어 있는 다음 수직 탭 위치로 커서를 이동
폼피드(form feed)
\f
12
주로 프린터에서 강제적으로 다음 페이지로 넘길 때 사용됨
캐리지 리턴(carriage return)
\r
13
커서를 현재 라인의 시작 위치로 옮김
큰따옴표
\“
34
원래의 큰따옴표 자체
작은따옴표
\‘
39
원래의 작은따옴표 자체
역슬래시(back slash)
\\
92
원래의 역슬래시 자체
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY
3.7.2 예제 escape.c
예제
결과
\b는 화면의 커서를 뒤로 움직이는 제어문 문자를 화면에
표시하려면 『\”』라고 해야함 그냥 『“』라고 하면
문자열의 시작이나 끝으로 간주
Http://netwk.hannam.ac.kr
HANNAM UNIVERSITY