[변수에서 값의 구현 원리] 1Byte  8Bit 로 구성 1Bit는 0 , 1 로 표현 2Bit로 표현할수 있는 경우의 수 00 01 10 11 22 가지, 즉 4가지 경우의 수 발생 8Bit 의 경우 00000000 ~ 11111111.

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr Chapter 3 변수와 자료형.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
제2장 C 언어의 확장 C++(1).
재료수치해석 HW # 박재혁.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
2부 자바 기본 다루기 - 3장 프로그래밍을 위한 자바의 자료형
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Chapter 7. 조건문.
#include <stdio.h> int main(void) { float radius; // 원의 반지름
제 9 장 구조체와 공용체.
Lecture 5 C의 기초적인 값(primitive value)의 컴퓨터에서의 표현 문자, 정수, 실수, 참/거짓
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
3. printf()와 데이터 형식.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Chapter 04 C 연산자의 이해.
Lesson 6. 형변환.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Chapter 06. printf 함수와 scanf 함수 정리하기
23장. 구조체와 사용자 정의 자료형 2.
임베디드 실습 # LED, 7’Segment 제어
2주차: 변수, 수식, Control Flow.
6장. printf와 scanf 함수에 대한 고찰
11장. 1차원 배열.
Ⅱ. 정보의 표현 1. 진수 변환 2. 2진수의 연산 3. 실수의 표현 ■ 단원 학습 정리 1. 10진수와 2진수
C#.
JA A V W. 03.
어서와 C언어는 처음이지 제14장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
상수와 기본 자료형.
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
연산자 (Operator).
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
컴퓨터 프로그래밍 기초 - 3rd : 상수,변수 생성규칙 및 자료형 -
Chapter 02. 자바 기본 문법.
8주차: Strings, Arrays and Pointers
1. 2진 시스템.
Chapter 08. 함수.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express Slide 1 (of 31)
제 6 장 함수(functions).
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
TVM ver 최종보고서
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Numerical Analysis Programming using NRs
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
C Programming Seminar 데이터와 입출력 함수.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

[변수에서 값의 구현 원리] 1Byte  8Bit 로 구성 1Bit는 0 , 1 로 표현 2Bit로 표현할수 있는 경우의 수 00 01 10 11 22 가지, 즉 4가지 경우의 수 발생 8Bit 의 경우 00000000 ~ 11111111 까지 이므로 28가지, 즉 65536가지의 수 발생 int M = 65; // 01000001 (실제로는 2진수로 변수에 담긴다.) 진법(2진수, 8진수, 16진수) 0 0 0 0 1 0 1 0 (10) MSB(Most Signed Bit) 최상위 부호비트 0: 양수 1: 음수 (단, sign형 기억장소 일때)

10진수 변환시 [1방법] = 0*20 + 1*21 + 0*22 + 1*23 + 0*24 + 0*25 + 0*26 결과: 10 마지막 27자리는 MSB이므로 계산의 대상에서 제외된다. [2 방법] = 0*1 + 1*2 + 0*4 + 1*8 + 0*16 + 0*32 + 0*64 [3 방법] = 1*2 + 1* 8 [4 방법] = 2+8 [진법 및 sign, unsigned 형 변수의 완벽해부] *********** 2진수 ************(1Byte) 0 0 0 0 1 0 1 0 (10) 0 0 0 0 1 0 1 0 MSB(Most Sign Bit) 최상위 부호비트 0: 양수 : 00001010 (+10) 1: 음수 : 11110101 (-11) 20 자리 21 자리 22 자리 23 자리 24 자리 25 자리 26 자리 27 자리

MSB 64 32 16 8 4 2 1 (가중치) 0 0 0 0 1 0 1 0 (2진수) MSB 64 32 16 8 4 2 1 (가중치) 0 1 0 1 1 0 1 0 (2진수) = 64 + 16 + 8 + 2 + 1 ( 91 ) MSB 64 32 16 8 4 2 1 (가중치) 0 0 1 1 0 1 0 0 (2진수) = 32 + 16 + 4 ( 52 )

[16진수] 10 11 12 13 14 15 (10진수로 볼때) 0 1 2 3 4 5 6 7 8 9 A B C D E F 2진수 네자리는 16진수 한자리 (16진수 1자리  2진수 4자리) 2진수 세자리는 8진수 한자리( 8진수 1자리  2진수 3자리) 0 0 0 1 0 0 1 1 ( 19 )  0x13 (16진수) 0 0 0 1 0 0 1 1 ( 19 )  023 ( 8진수) ex) 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 0

[진법간 상호 변환] 0x23  0010 0011 0x79  0111 1001 035  00 011 101 036  00 011 110 043 0x75 076 046 [컴퓨터의 음수 표현]  2의 보수법 ( 2’s Complement ) 00001010 ( +10 ) 11110101 ( 1의 보수법으로 변환 ) 11110110 ( 위의 수에 1을 더한다) ( -10 ) MSB

[양수일경우] MSB 64 32 16 8 4 2 1 (가중치) 0 0 0 0 1 0 1 0 (2진수) = 8 + 2 결과: +10

28가지  256가지 양수 128 가지( 0 ~ 127 ) 음수 128 가지( -1 ~ -128 ) 1 1 1 0 0 1 0 1 : -( 16 + 8 + 2 + 1 ) 결과: -27 1 1 0 1 0 1 0 1 : -( 32 + 8 + 2 + 1 ) 결과: -43 문 1) -22를 2진수로 표현 하시오. 힌트: 1 과 0 을 바꾸어서 21 을 만든다. 1 1 1 0 1 0 1 0 : - (16 + 4 + 1 + 1) [ 1Byte 기억장소가 기억할수 있는 값의 범위 ] 01111111 (127) : 00000010 ( 2 ) 00000001 ( 1 ) 00000000 ( 0 ) 11111111 ( -1 ) 11111110 ( -2 ) 11111101 ( -3 ) 11111100 ( -4 ) : 10000000 ( -128 ) 28가지  256가지 양수 128 가지( 0 ~ 127 ) 음수 128 가지( -1 ~ -128 )

[signed 형과 unsigned 형 기억장소] signed 형일경우) 0 0 1 0 0 0 0 1 ( +33 ) 1 1 1 1 1 0 0 0 ( - 8 ) unsigned 형일경우) : 첫번째 비트는 MSB 가 아니다. 즉, 음수가 없다. 0 0 1 0 0 0 0 1 ( +33 ) 1 1 1 1 1 0 0 0 ( +248 ) char a = 128; // 10000000 (-128) // 첫 비트를 MSB로 인식 unsigned char a = 128; // 10000000 // 첫 비트를 MSB로 인식하지 않음

1. 자료형 2. 상수 3. 변수 a. 정수형 자료형 종 류 크기(byte) 표현가능수 값의 범위 char 1 28 -128 ~ 127 unsigned char 0 ~ 255 int 2 또는 4 short 2 216 -32768 ~ 32767 long 4 232 -2147483648 ~ 2147483647 unsigned int unsigned short 0 ~ 65535 unsigned long 0 ~ 4294067295 int 또는 unsigned int 는 16bit 운영체제에서는 2byte공간이 확보되고 32bit 운영체제나 대형서버 기종에서는 4byte공간이 확보된다.

b. 실수형 자료형 종 류 크기(byte) 값의 범위 float 4 약 –10-38 ~ +10+38 double 8 종 류 크기(byte) 값의 범위 float 4 약 –10-38 ~ +10+38 double 8 약 –10-308 ~ +10+308 [자료형 예제] int kor; // 2 byte char hak; // 1 byte double avg; // 8 byte char su = 280; // 가능한가? // -128 ~ 127 long suja = 3948389;

[출력함수]  C언어는 문장(statement)이라는 것을 이용하지 않고 함수(function)라는 것을 이 용해 입출력을 수행한다. [ printf 함수 ] 형식) 1. printf(“ 출력메시지”); 2. printf(“ 출력서식”); 3. printf(“ 출력메시지 및 출력서식”, 출력대상체...); 1. 사용예 printf(“ Hello !”); printf(“안녕하세요?”); printf(“ 박상훈은 잘 생겼다.”); printf(“ 상훈이와 철수 는 밤새도록 공부를 열심히 하였다.”); (줄을 바꾸어 출력하고자 할경우) printf(“상훈이는 C언어에 \n미쳤다.”); 2. 사용예 printf(“ %d ”, 25); printf(“ %f ”, 45.43); printf(“ %c ”, ‘A’); printf(“ %ld ”, 34567430); printf(“ %s ”, “이한 디지털리”); int kor = 97; printf(“ %d ”, kor );

3. 사용예 printf(“ 철수의 나이는 %d 살 이고 \n영희의 나이는 %d 살 입니다.”, 9, 8 ); [결과] 철수의 나이는 9살 이고 영희의 나이는 8살 입니다. printf(“ 여기에 있는 사과의 종류는 %s 이고, \n갯수는 %d 개 입니다.” , “홍옥”, 4 ); [결과] 여기에 있는 사과의 종류는 홍옥이고, 갯수는 4개 입니다. [예제] #include<stdio.h> void main() { int kor = 97; printf(“국어 점수는 %d입니다.”, kor ); }

[상수]  상수란. : 변할수 없는 고유한 크기를 갖는 수  상수의 종류 1 [상수]  상수란? : 변할수 없는 고유한 크기를 갖는 수  상수의 종류 1. 정수상수  정수는 일반적으로 메모리상에 2byte로 표현 된다.  4byte로 표현하여 사용 하고자 할 경우에는 숫자 뒤에 L 자를 붙히면 된다. 예) 43L  8진수는 숫자 앞에 0(zero) 을 붙히고, 16진수는 숫자앞에 0x를 붙힌다. ( 십진수: 34 8진수: 023 16진수: 0x3A ) 상수종류, 의 미 표 현 정수상수 소숫점이 없는수 32, 156, 0, 23L, 0x3a, 021 실수상수 소수점이나 지수를 가진수 21.32, 0.012, 21.3E+01, 76.2F 문자상수 ‘ ‘ 안에 표현 되는 1byte 수 ‘A’, ‘M’, ‘b’, ‘\n’, ‘\t’ 문자열상수 “ “ 안에 표현되는 2byte 이상의 수 “KBS”, “mbc”, “박상훈”, “a” 나열형상수 사용자가 임의로 만든 수 NAME, PRICE, PCT 주소상수 메모리 상의 임의의 위치 값 ‘\0’, (char *)0xfb31

[정수 출력 서식] printf() 과 같은 함수를 이용하여 정수를 출력하기 위해서는 다음과 같은 출력서식을 사용한다. 출 력 범 위 출력크기 결과값 %d -32768 ~ 32767 2 byte 범위의 data 출력용 10진수 %o ″ 8진수 %x 16진수 %u 0 ~ 65535 (주소 표현시 사용) %ld -21474836 ~ 21474837 4 byte 범위의 data 출력용 %lo %lx %lu 0 ~ 4294967295 [Tip] 우리는 어떤 data 를 어떻게 출력 하느냐에 따라 적절한 출력 서식을 선택 해야만 한다. 위의 내용은 다소 중요한 내용이므로 외워두자!

//출력서식 예제1 #include<stdio.h> void main() { printf(“ %d\n”, -23); printf(“ %ld\n”, -231); printf(“ %d\n”, 765474); printf(“ %u\n”, -23); printf(“ %lu\n”, -2332); printf(“ %ld\n”, 7800000); } // 출력 범위에 맞지 않으면 쓰레기 값이 출력된다. 2. 실수상수  실수는 일반적으로 메모리상에 8byte로 표현 된다.  4byte로 표현 하고자 할경우에는 뒤에 F자를 붙힌다. 예) 23.5F 출력서식 출력내용 출력 예 %f 소숫점 이하 6자리 까지 출력한다. 34.600000 , 0.012000 %e 지수 형태로 출력한다. 2.230000e+01 %g 일반적인 형태로 출력한다. 23.543

printf( “%f “, 21.8 ); 결과: 21.800000 printf( “%f “, 0.023 ); 결과: 0.023000 printf( “%f “, 532.145 ); 결과: 532.145000 printf( “%f “, 0.1235478 ); 결과: 0.123548 (소숫점 이하 7자리에서 반올림) printf( “%e ”, 21.8 ); 결과: 2.180000e+01 printf( “%e “, 0.023 ); 결과: 2.300000e-02 printf( “%e “, 532.145 ); 결과: 5.321450e+02 printf( “%e “, 0.12354788 ); 결과: 1.235479e-01 (7자리에서 반올림) printf( “%g ”, 21.8 ); 결과: 21.8 printf( “%g “, 0.023 ); 결과: 0.023 printf( “%g “, 532.145 ); 결과: 532.145

3. 문자형 상수  ‘ ‘안에 기재하는 1byte문자  문자상수를 표현할때는 2btye공간을 필요로 하지만 기억장소에 저장이 될때는 하위 1byte 만 저장이 되어진다. ( 따라서 1byte 정수와 구별이 되지 않는다.)  제어문자(하드웨어 적인 기능을 수행 하는 문자)를 포함한다. ‘\n’ : 커서나 파일 포인터를 다음행 동일열로 이동 시킨다. ‘\a’ : 스피커를 통해 “삑” 소리를 나게 한다. ‘\r’ : 커서나 파일 포인터를 동일행 첫열로 이동 시킨다. ‘\f’ : 프린터 용지를 한장 넘긴다. ‘\b’ : 커서나 파일 포인터를 동일행 이전 열로 이동 시킨다. ‘\t’ : 커서나 파일 포인터를 동일행에서 일정한 칸만큼 이동 시킨다.  출력서식 으로는 %c 를 이용하여 출력한다. #include<stdio.h> void main() { printf(“%c”, ‘A’); printf(“%c”, ‘\n’); printf(“%c”, ‘B’); printf(“%c”, 65); printf(“%c”, 97); } [출력결과] A BAa

4. 문자열 상수  따옴표(“ “)안에 사용하는 문자  문자열상수는 실제 표현되어 있는 글자수 보다 1byte더 크게 메모리에 표현된다.  모든 문자열 뒤에는 NULL(널)값이 붙어 있다.  출력서식으로는 %s를 사용한다. #include<stdio.h> void main() { printf(“%d”, sizeof( “korea”) ); printf(“%d”, sizeof(“english”) ); printf(“%d”, sizeof( “japan”) ); printf(“%d”, sizeof(int) ); printf(“%d”, sizeof(double) ); printf(“%d”, sizeof(27) ); printf(“%d”, sizeof(2.45) ); } #include<stdio.h> void main() { printf(“%s\n”, “korea”); printf(“%s\n”, “english”); printf(“%s\n”, “japan”); } sizeof( ) 연산자란? 괄호안에 자료형, 변수, 값 등을 넣을수 있으며 괄호안에 있는 것이 메모리에 표현될때 해당 byte수를 발생한다.

#include<stdio.h> void main() { printf( “MBC\n”); printf( “MBC+1\n”); printf( “MBC+2\n”); } [처리결과] MBC MBC+1 MBC+2 #include<stdio.h> void main() { printf(“%s\n”, “MBC”); printf(“%s\n”, “MBC”+1); printf(“%s\n”, “MBC”+2); } [처리결과] MBC BC C

[문자열 상수가 메모리에 표현 되는 방법] C언어에서 모든 문자열은 자기 자신의 주소로 간주된다 [문자열 상수가 메모리에 표현 되는 방법] C언어에서 모든 문자열은 자기 자신의 주소로 간주된다. 따라서 “박상훈” 이란 문자열이 몇번지쯤에 있는지를 알고 싶으면 “박상훈”이란 번지를 출력해 보면 된다. 그리고 %s라는 출력서식 또한 해당 번지부터 시작해서 널값 전까지 출력하라는 뜻이므로 “MBC”번지 부터 널값 전까지 출력한다. ‘M’ ‘B’ ‘C’ ‘\0’ “MBC”+3 번지 “MBC”+2 번지 “MBC”+1 번지 “MBC” 번지

5. 나열형 상수  사용자가 임의로 숫자를 만들어 사용하는 방법으로 컴파일러와의 약속에 의 해 구현될수 있다 5. 나열형 상수  사용자가 임의로 숫자를 만들어 사용하는 방법으로 컴파일러와의 약속에 의 해 구현될수 있다. 정수와 완전히 동일하게 사용된다.  예) enum COLOR{BLACK, BLUE, GREEN, MAZENTA}; 이름 0 1 2 3  문자를 숫자처럼 사용하는 방법이다.  초기값이 지정되면 해당값을 사용하며 이후의 문자들은 무조건 앞의 숫자에 1을 더한 값을 사용하게 된다. #include<stdio.h> void main() { enum COLOR{BLACK, BLUE = 4, RED, HHH = 7, FFF }; int su = BLACK + BLUE; printf(“ %d “, su); printf(“ %d “, RED + FFF ); }

3. 변수  변수는 상수값을 기억 시키기 위한 메모리의 일정 공간을 의미한다 3. 변수  변수는 상수값을 기억 시키기 위한 메모리의 일정 공간을 의미한다.  종류: 정수변수, 실수변수, 문자변수, 나열형변수, 주소변수 등이 있다. 3.1 문자변수  기억장소를 1byte로 확보한다.  char, unsigned char 예약어를 사용하여 변수를 준비한다.  char M; unsigned char N; 3.2 정수변수  자료형에 따라 기억장소의 크기가 결정된다.  short, int, unsigned short, unsigned int : 2byte  long, unsigned long : 4byte 3.3 실수변수  float(4), double(8) 의 크기로 기억장소가 확보된다. 3.4 나열형 변수  나열형 상수를 대입할때 사용이 된다.  정수변수와 동일하게 취급된다.  enum NAT{ONE, TWO, THREE}; enum NAT var = TWO;

[자동형 변환과 강제형 변환] a. 자동형 변환  연산이나 대입시에 자료형이 자동적으로 바뀌어서 처리되는 것을 말한다 [자동형 변환과 강제형 변환] a. 자동형 변환  연산이나 대입시에 자료형이 자동적으로 바뀌어서 처리되는 것을 말한다.  연산이나 대입시 자료형이 작은쪽에서 큰쪽으로 자료형 변환이 발생한다.  크기 char -> unsigned char -> short -> unsigned short -> int -> unsigned int -> long -> unsigned long -> float -> double 예) ‘A’ + 3 일경우 ‘A’는 char형이고 3은 int 형이므로 char형이 int 형으로 변환되어 연산이 발생한다. 연산의 결과는 int 형이 발생한다. #include<stdio.h> void main() { int M, N; printf(“%f”, 2.4 + 1.2); M = 2.4 + 1.2; printf(“%d,%f”, M, 3.65+2); }

a. 강제형 변환  사용자가 강제적으로 형변환을 유도하는 것을 말한다.  이때 사용되는 연산자를 cast 연산자라 한다 a. 강제형 변환  사용자가 강제적으로 형변환을 유도하는 것을 말한다.  이때 사용되는 연산자를 cast 연산자라 한다. 예) int M = 2.3 + (int)6.9; int A = (int)( 2.1 + 9.2 ); printf(“%d”, (int)(2.4+2) ); int Tot = (90+100+90)/3; #include<stdio.h> void main() { int M; double N; printf(“%d”, (int)(2.4 + 1.2) ); N = 2.4 + 1.2; printf(“%d,%d”, M, (int) N ); }