연산자(2) Chapter 6 Kum Deuk Kyu , Ph. D. Spring 2015

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
문자코드 1 박 2 일 (4 조 ) 이경도 이준집 이수연 엄태규. 문자코드란 ? 문자나 기호를 컴퓨터로 다루기 위하여, 문자나 기호 하나하나에 할당 시키는 고유의 숫자를 말하는 것이다.
재료수치해석 HW # 박재혁.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
Chapter 7. 조건문.
#include <stdio.h> int main(void) { float radius; // 원의 반지름
제 9 장 구조체와 공용체.
8. 객체와 클래스 (기본).
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
Chapter 04 C 연산자의 이해.
Lesson 6. 형변환.
3장. Hello World 01_ Hello World 프로그램 훑어보기.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
C++ Espresso 제12장 템플릿.
Part 05 순수한 연산자 ©우균, 창병모 © 우균, 창병모.
임베디드 실습 # LED, 7’Segment 제어
6장. printf와 scanf 함수에 대한 고찰
Tail-recursive Function, High-order Function
14. 예외처리.
C#.
13. 연산자 오버로딩.
JA A V W. 03.
어서와 C언어는 처음이지 제14장.
Lesson 4. 수식과 연산자.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
Mar 김 준 영 (juny924@gmail.com)
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
01_ C++ 스타일의 입출력 02_ C 스타일의 입출력
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 02. 자바 기본 문법.
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
1. 2진 시스템.
Chapter 07 비트와 여러 연산자.
3강. 컴퓨터와의 기본적인 소통수단 - I 연산자란? 컴퓨터와 소통하기 위한 다양한 방법들
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
01 로그의 정의 ⑴ 일 때, 양수 에 대하여 을 만족시키는 실수 는 오직 하나 존재한다. 이때 를
제 15 강 문자와 코드 shcho.pe.kr.
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 1 단위, 물리량, 벡터.
Flow Diagram IV While.
제 22 강 논리식 및 논리 값 shcho.pe.kr.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
수치해석 ch3 환경공학과 김지숙.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
실 습 2.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

연산자(2) Chapter 6 Kum Deuk Kyu , Ph. D. Spring 2015 PMP, CISA, ISO 9001 Auditor Dept. of Computer Software DongSeoul University dkkum@hanmail.net, dkkum73@gmail.com

Contents 복습 예제 응용 예제 연산자(2)

복습 예제(1/2) 이것만은 알고 갑시다. 1. C++의 주요 타입을 나열해 보았다. 아래와 같이 비슷한 성격을 갖는 타입으로 묶어보자. 2. 아래 빈 칸을 채워보자. 1바이트는 ( 8 ) 비트다. 타입의 크기를 알아내기 위해서 ( sizeof() ) 연산자를 사용한다. bool, int, double, long, unsigned char, wchar_t, unsigned int, char, float, short, unsigned short, unsigned long 정수를 담는 용도의 타입 Short, int, long 문자를 담는 용도의 타입 char, unsigned char, wchar_t 실수를 담는 용도의 타입 Float, double 0과 양수만 담을 수 있는 타입 Bool Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

복습 예제(2/2) 3. 변수에 저장한 값이 같더라도 타입에 따라 다르게 해석한다는 점을 확인하기 위한 소스코드다. 아래와 같은 실행 결과가 나올 수 있도록 소스 코드의 빈 곳을 채워보자. #include <iostream> using namespace std; int main() { float f = 65.5f; cout << "float = " << f << endl; cout << "int = " << [ (int) ]f << endl; cout << "char = " << [ (char) ]f << endl; return 0; } 실행결과 float = 65.5 int = 65 char = A Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

응용 예제 4-1 치환연산자의 사용(1/2) 치환 연산자 치환 연산자의 종류 a+=1은 a=a+1과 같으며, b*=2는 b=b*2와 같다. 치환 연산자는 산술 연산자 뿐 아니라, 비트 연산자 등의 다른 연산자와도 동일한 방식으로 조합될 수 있다. Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

응용 예제 4-1 치환연산자의 사용(2/2) 01 #include<iostream> 02  using namespace std; 03  int main(int argc, char* argv[]) 04  { 05 06      int x = 1; 07      int y = 2; 08      int z = 3; 09      int w = 4; 10      int v = 5; 11  12      int a,b; 13      a = b = 1; 14  15      x += 1; 16      y -= 1; 17      z *= 2; 18      w /= 2; 19      v %= 2; 20  21      cout << "x += 1 --> " << x << "\n"; 22      cout << "y -= 1 --> " << y << "\n"; 23      cout << "z *= 2 --> " << z << "\n"; 24      cout << "w /= 2 --> " << w << "\n"; 25      cout << "v %= 2 --> " << v << "\n"; 26      cout << "a = " << a << ", b = " << b << "\n"; 27      28      return 0; 29  } 변수를 선언한다. 사칙 연산과 치환을 수행 한다. Fire at a Research Center Engineer Physicist Mathematics S/W Engineer 결과를 출력한다.

연산자(2)

논리 연산자(Logical Operators) 관계 연산자들을 이용해서 관계에 대해 표한할 수 있게 되었으나, ‘x>y and v<w’와 같은 여러 관계 들에 대해서는 어떻게 표현할까? 피연산자를 사용해서 부울 연산을 수행한다. 피연산자1 피연산자2 AND(&&) OR(||) NOT(!) false true Fire at a Research Center Engineer Physicist Mathematics S/W Engineer * NOT 연산자는 피연산자1 만 받는다.

관계연산자와 논리연산자 일반적으로 논리연산자는 관계연산자와 함께 사용한다. 관계연산자의 우선순위가 높으므로 먼저 수행된다. int age = 20; // 나이 bool male = true; // 성별 // 20세 이상이면서 남성인지 여부를 알아봄 bool ok = age >= 20 && male == true Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

*아래 실행 결과가 출력되도록 코드를 추가해보세요 ^^!! 논리 연산자의 사용 1 예제 6-6 AND, OR 연산자 함께 사용하기 (예제 6-6, p114) int main() { // 키와 시력을 보관할 변수를 정의한다. int height; float eyesight; // height, eyesight 값을 입력받는다. // ( 여러분은 아직 입력 받는 법을 배우지 않았으므로 // 소스 코드 상에서 그냥 대입한다) height = 175; eyesight = 0.8f; // 조건을 만족하는지 검사한다. // 자격을 갖춘 사람인가? bool ok; ok = height >= 160 && height <= 180 || eyesight >= 1.0f && eyesight <= 2.0f; return 0; } *아래 실행 결과가 출력되도록 코드를 추가해보세요 ^^!! Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

논리 연산자의 사용 2 응용 예제 4-2 01 #include<iostream> 02  using namespace std; 03  int main(int argc, char* argv[]) 04  { 05  06      int math = 85; 07  08     bool bGrade1 = math >= 90; 09     bool bGrade2 = math >= 80 && math < 90; 10      bool bGrade3 = math >= 70 && math < 80; 11      bool bGrade4 = math >= 60 && math < 70; 12     bool bGrade5 = math < 60; 13      14      cout << " 수 = " << bGrade1 << "\n"; 15      cout << " 우 = " << bGrade2 << "\n"; 16      cout << " 미 = " << bGrade3 << "\n"; 17      cout << " 양 = " << bGrade4 << "\n"; 18      cout << " 가 = " << bGrade5 << "\n"; 19      20      return 0; 21  } 변수를 선언한다. 논리 연산을 수행 한다. 결과를 출력한다. Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

10진수, 2진수, 16진수 변환 진법 표현 10진수 15624=1*(10^4)+5*(10^3)+6*(10^2)+2*(10^1)+4*(10^0) 2진수 1101101=1*(2^6)+1*(2^5)+0*(2^4)+1*(2^3)+1*(2^2)+0*(2^1)+1*(2^0) = 1*64+1*32+0*16+1*8+1*4+0*2+1*1=64+32+8+4+1 = 109(십진수) 진법 변환 10진수 를 2진수(37 -> 100101), 16진수로(524 -> 20C) 16진수는 {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}를 사용. 즉, 16진법의 기호를 10진법으로 나타내면 a=10, b=11, c=12, d=13, e=14, f=15 에 해당 여기서 ‘^’ 기호는 좌승을 의미한다.!! 10 ^4 = 10의4제곱승 Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

Exercise 6.2 10진수, 2진수, 16진수 변환 연습 진수 변환 법 연습 이 변환 연습은 많이 할 수록 좋다. 실제로 쓸 일도 많고, 조금만 연습해도 금방 익숙해진다. 빈 칸을 채우자. * 16진수는 4비트가 하나의 16진수로 변환되며 0x로 시작하는 것으로 표현할 수 있다. 2진수 16진수 10진수 1101 D 13 10100011 A3 163 110011101001 CE9 3305 1010 0xA 10 10011011 0x9B 155 Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

비트단위 연산자 (Bitwise Operators) 비트단위 논리 연산자(Logical Bitwise Operators)는 각각의 비트를 대상으로 논리 연산을 수행한다. Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

비트단위 논리 연산자의 종류 각 비트를 대상으로 다음과 같이 연산한다. 피연산자1의 i 번째 비트 피연산자2의 i번째 비트 AND(&) OR(|) XOR(^) NOT(~) 1 * NOT 연산자는 피연산자1 만 받는다. Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

비트단위 논리 연산자의 예 178과 113을 사용해서 4가지 비트단위 논리 연산을 수행 unsigned char a, b; unsigned char c1, c2, c3, c4; c1 = a & b; // AND c2 = a | b; // OR c3 = a ^ b; // XOR c4 = ~a; // NOT Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

*2진수로 출력하기 위해서는 bitset 클래스가 필요하다.!! 비트연산자의 사용 (예제 6-9) 178과 113을 사용해서 4가지 비트단위 논리 연산을 수행 #include <bitset> #include <iostream> using namespace std; int main() { // 피연산자를 준비한다. unsigned char a, b; a = 178; b = 113; // 비트단위 논리 연산을 수행 unsigned char c1, c2, c3, c4; c1 = a & b; // AND c2 = a | b; // OR c3 = a ^ b; // XOR c4 = ~a; // NOT // 결과를 출력한다. // 괄호안에는 10진수가 출력된다. cout << "a = " << bitset<8>(a) << "(" << (unsigned int)a << ")\n"; cout << "b = " << bitset<8>(b) << "(" << (unsigned int)b << ")\n"; cout << "a & b = " << bitset<8>(c1) << "(" << (unsigned int)c1 << ")\n"; cout << "a | b = " << bitset<8>(c2) << "(" << (unsigned int)c2 << ")\n"; cout << "a ^ b = " << bitset<8>(c3) << "(" << (unsigned int)c3 << ")\n"; cout << "~a = " << bitset<8>(c4) << "(" << (unsigned int)c4 << ")\n"; return 0; } *2진수로 출력하기 위해서는 bitset 클래스가 필요하다.!! Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

비트단위 논리 연산의 응용 (예제 6-10) 16비트 크기를 갖는 unsigned short 타입 변수에 한 점의 색상이 보관되어 있다고 가정. 파란색에 해당하는 부분의 밝기를 구하라!! 컴퓨터 상 색상 표현 : RGB(빨강, 초록, 파랑)를 16비트 색상으로, R(5비트), G(6비트), B(5비트) 씩 할당 주요 색상을 2진수로 표현하면 빨강 – 11111 000000 00000 , 초록 - 00000 111111 00000, 파랑 - 00000 000000 11111 #include <bitset> #include <iostream> using namespace std; int main() { // 한 점의 색상을 보관하는 변수 // (임의의 값을 넣어둔다) unsigned short color = 0x1234; // 파란색을 제외한 나머지 비트를 지운다. // 0x001f는 2진수로 0000 0000 0001 1111이다. unsigned short blue; blue = color & 0x001f; // 결과 출력 cout << "color = " << bitset<16>(color) << "(" << color << ")\n"; cout << "blue = " << bitset<16>(blue) << "(" << blue << ")\n"; return 0; } *비트 단위 AND 연산을 수행해서 필요치 않은 비트들을 0으로 만들어 버림으로써 파란색의 정보만 남게 함!! *0x001f는 파란색이 위치하는 오른 쪽 다섯개의 비트만 1인 이진수를 16진수로 표현한 것!! Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

쉬프트 연산자 (예제 6-11, p127) 쉬프트 연산자는 비트를 몇 칸씩 옆으로 이동시킴. (녹색 부분의 값 구하기) #include <bitset> #include <iostream> using namespace std; int main() { // 한 점의 색상을 보관하는 변수 // (임의의 값을 넣어둔다) unsigned short color = 0x1234; // 녹색을 제외한 나머지 비트를 지운다. // 0x07e0은 2진수로 0000 0111 1110 0000이다. unsigned short green_temp; green_temp = color & 0x07e0; // 녹색의 비트들을 오른쪽 끝으로 이동시킨다. unsigned short green; green = green_temp >> 5; // 결과 출력 cout << " color = " << bitset<16>(color) << "(" << color << ")\n"; cout << "green_temp = " << bitset<16>(green_temp) << "(" << green_temp << ")\n"; cout << " green = " << bitset<16>(green) << "(" << green << ")\n"; return 0; } Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

쉬프트 연산자 2 (예제 6-12, p129) 빨간색 부분의 값 바꾸기 Fire at a Research Center #include <bitset> #include <iostream> using namespace std; int main() { // 한 점의 색상을 보관하는 변수 // (임의의 값을 넣어둔다) unsigned short color = 0x1234; // 빨간색 부분의 비트들을 0으로 만든다. // 0x07ff는 2진수로 0000 0111 1111 1111 이다. unsigned short color_temp; color_temp = color & 0x07ff; // 새로운 빨간색의 값을 준비한다. unsigned short red = 30; // 빨간색의 값을 왼쪽 끝으로 옮긴다. unsigned short red_temp; red_temp = red << 11; // 빨간색의 값을 색상에 넣는다. unsigned short color_finished; color_finished = color_temp | red_temp; // 결과 출력 cout << " color = " << bitset<16>(color) << "(" << color << ")\n"; cout << " color_temp = " << bitset<16>(color_temp) << "(" << color_temp << ")\n"; cout << " red = " << bitset<16>(red) << "(" << red << ")\n"; cout << " red_temp = " << bitset<16>(red_temp) << "(" << red_temp << ")\n"; cout << "color_finished = " << bitset<16>(color_finished) << "(" << color_finished << ")\n"; return 0; } Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

연산자의 축약형 연산자의 축약형을 사용해서 번거로운 코딩을 줄일 수 있다. 축약형 같은 의미의 수식 a += b; a = a + b; a -= b; a = a – b; a *= b; a = a * b; a /= b; a = a / b; a %= b; a = a % b; a &= b; a = a & b; a |= b; a = a | b; a ^= b; a = a ^ b; a <<= b; a = a << b; a >>= b; a = a >> b; Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

*전치 연산과 후치 연산은 서로 다른 결과를 내놓게 된다.!! 축약형 연산자의 사용 (예제 6-14, p 135) + +, - - 연산자의 사용 #include <iostream> using namespace std; int main() { // 4 개의 변수를 동일한 값으로 채운다. int A, B, C, D; A = B = C = D = 3; // 다양하게 ++, -- 연산자를 사용한다. int ppA, Bpp, mmC, Dmm; ppA = ++A; Bpp = B++; mmC = --C; Dmm = D--; // 결과를 출력한다. cout << " A, B, C, D : " << A << ", " << B << ", " << C << ", " << D << "\n"; cout << "++A, B++, --C, D-- : " << ppA << ", " << Bpp << ", " << mmC << ", " << Dmm << "\n"; return 0; } *전치 연산과 후치 연산은 서로 다른 결과를 내놓게 된다.!! Fire at a Research Center Engineer Physicist Mathematics S/W Engineer

Kum Deuk Kyu Mobile 010-5334-2448 dkkum@hanmail.net, dkkum73@gmail.com Q & A Thank You ! 여러분은 누구보다 위대하고 존귀한 존재이며, 사랑하는 하나님의 자녀입니다. 학업이나 진로, 개인적인 상담을 원하시는 분은 아래 연락처로 연락주세요..^^ Kum Deuk Kyu Mobile 010-5334-2448 dkkum@hanmail.net, dkkum73@gmail.com