• 검색 결과가 없습니다.

대입 과정의 형 변환

N/A
N/A
Protected

Academic year: 2022

Share "대입 과정의 형 변환"

Copied!
15
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

대입 과정의 형 변환

형 변환

– 정수를 실수형 변수에 넣는 것은 문제 없지만,

– 실수를 정수형 변수에 넣는 것은 자료의 손실이 생긴다. 컴파일 에서 경고한다.

오버플로(overflow)는 경고하지 않는다.

강C프로그래밍 1

char c;

C = 10000; char = int (자료 손실. 경고)

C = 100 + 100; char = char + char (오버플로. 경고 없 음)

(2)

명시적 형 변환

명시적 형 변환(explicit type conversion)

– 개발자가 의도적으로 자료의 형을 변환하는 것

변수 또는 상수 앞에 (자료형)을 넣는다.

– value = (float) 10; // 상수 10을 float 형 10.0으로 변 환한다.

(int)로의 형 변환은 소수점 이하를 제거하고, (float)으로 의 형 변환은 경고를 없앤다.

– 반올림은? 강C프로그래밍 2

int i ;

double f = 10.0;

i = f; // 컴파일시에 경고가 나온다.

i = (int) f; // 경고 없이 컴파일된다.

(3)

명시적 형 변환

결과값을 예측하자.

강C프로그래밍 3

#include <stdio.h>

int main(void) {

printf("(1) %d 입니다.\n", 7 / 3);

printf("(2) %d 입니다.\n", 7 / 3.0);

printf("(3) %f 입니다.\n", 7 / 3);

printf("(4) %f 입니다.\n", 7 / 3.0);

printf("(5) %d 입니다.\n", 7 / (double)3);

printf("(6) %f 입니다.\n", (double)7 / 3);

printf("(7) %f 입니다.\n", (int)7 / 3.0);

printf("(8) %f 입니다.\n", 7 / (int)3.0);

}

(4)

명시적 형 변환

강C프로그래밍 4

#include <stdio.h>

int main(void) {

printf("(1) %d 입니다.\n", 7 / 3);

printf("(2) %d 입니다.\n", 7 / (int) 3.0);

printf("(3) %f 입니다.\n", (double)7 / 3);

printf("(4) %f 입니다.\n", 7 / 3.0);

printf("(5) %d 입니다.\n", (int) (7 / (double)3));

printf("(6) %f 입니다.\n", (double)7 / 3);

printf("(7) %f 입니다.\n", (int)7 / 3.0);

printf("(8) %f 입니다.\n", 7 / (double) (int)3.0);

}

(5)

5.4 관계, 논리, 비트 연산자

5 강C프로그래밍

(6)

관계 연산자

크다, 작다, 같다의 관계를 판단

관계연산자도 값을 반환한다.

– 맞으면 1 (True의 의미) – 틀리면 0 (False의 의미)

강C프로그래밍 6

컴퓨터에서 0은 FALSE, 1 또는 0이 아닌 모든 수는 TRUE 이다.

연산자 의미 사용법

> 왼쪽이 더 크다 a > b

< 오른쪽이 더 크다 a < b

>= 왼쪽이 더 크거나 같다 a >= b

<= 오른쪽이 더 크거나 같다. a <= b

== 같다 a == b

!= 다르다 a != b

(7)

비교

사용 예

– result = 3 > 2 ; // result 에 1(True)이 들어간다.

– result = value <= 100; // value의 값에 따라 0 또는 1이 들어 간다.

잘못된 사용

– result = -3 < value < 0 ; (문법상 에러는 아니지만, 의도와 다 르다)

– result = ( -3 < value ) < 0; 으로 해석되기 때문

강C프로그래밍 7

관계 연산자를 하나의 수식에 여러 개를 쓰는 것은 좋지 않다.

(8)

동등

같다 (==)

– 양쪽의 피연산자의 값이 같으면 1(True), 다르면 0(False) 반환 – a == b (변수 a 와 b의 값이 같은가)

– a == 1 (변수 a의 값이 1인가)

다르다 (!=)

– 양쪽의 피연산자의 값이 다르면 1(True), 같으면 0(False) 반환

강C프로그래밍 8

a=1, b=2, c=3일때

ret = (a < b) == (b < c) 에서 ret 의 값은?

(9)

관계 연산자와 관련된 실수들

>= 는 있지만 =>는 없다.

!=는 있지만 < >는 없다.

!는 반대라는 의미로 논리연산자에서도 사용된다.

! =, > =, = = 와 같이 공백이 들어가면 안 된다.

==와 =는 다르다. 잘못 쓰더라도 에러가 나지 않는다.

강C프로그래밍 9

(10)

논리 연산자

옳다, 그르다의 판단을 하는 연산자

– 피연산자 역시 옳다(True), 그르다(False) 값이 들어간다.

&&, ||, ! 의 세가지가 있다.

– ||는 ‘Shift-\’ 세로막대기(horizontal bar)이다.

주로 조건문(6장 참조)에 사용된다.

강C프로그래밍 10

&& || !

True && True -> True True || True -> True ! True -> False True && False -> False False|| True -> True ! False -> True False && True -> False True || False -> True

False && False -> False False || False -> False

(11)

논리 연산자

Result = number > 10 || number < 5;

– number 값이 10보다 크거나 또는 5보다 작으면 Result에 True

Result = score || set

– Result = (score != 0) || (set != 0 ); 0은 False, !0 은 True

의미 없는 수식이 되지 않도록 유의한다.

– Result = number > 10 && number < 5 ;

괄호를 이용하면 이해하기 쉽다.

– Result = (number > 10) || (number < 5);

강C프로그래밍 11

(12)

비트 연산자

2진수의 각 비트별 연산

시스템 프로그램, 하드웨어 제어에 주로 이용

예)

강C프로그래밍 12

c = 3 & 5;

0 0 1 1 (3) 0 1 0 1 (5) --- --

0 0 0 1 (1) c = 1

c = 3 | 5;

0 0 1 1 (3) 0 1 0 1 (5) --- --

0 1 1 1 (7) c = 7

c = 3 ^ 5;

0 0 1 1 (3) 0 1 0 1 (5) --- --

0 1 1 0 (6) c = 6

c = ~3 ; 0 0 1 1 (3) ---

1 1 0 0 (12)

c = 12 또는 - 4

* 편의상 4비트라 가정

& (AND)

0 & 0 -> 0 0 & 1 -> 0 1 & 0 -> 0 1 & 1 -> 1

| (OR) 0 | 0 -> 0 0 | 1 -> 1 1 | 0 -> 1 1 | 1 -> 1

^ (XOR) 0 ^ 0 -> 0 0 ^ 1 -> 1 1 ^ 0 -> 1 1 ^ 1 -> 0

~ (1의보수) 0 -> 1 1 -> 0

(13)

비트 연산자

Shift 연산자 << >>

– a << b : a의 값을 왼쪽으로 b 비트 만큼 이동 – a >> b : a의 값을 오른쪽으로 b 비트 만큼 이동

– << 1 는 2를 곱한 효과가, >> 1은 2로 나눈 효과가 있다.

강C프로그래밍 13

c = 2 << 3;

0 0 0 0 0 0 1 0 (2)

0 0 0 0 0 1 0 0 (2 << 1 ->

4 )

0 0 0 0 1 0 0 0 (2 << 2 ->

8 )

0 0 0 1 0 0 0 0 (2 << 3 ->

16 ) c = 16

c = 18 >> 2;

0 0 0 1 0 0 1 0 (18)

0 0 0 0 1 0 0 1 (18 >> 1 ->

9 )

0 0 0 0 0 1 0 0 (18 >> 2 ->

4 )

c = 4

(14)

비트 연산자의 활용

변수와 LED가 연결되어 있을 때,

강C프로그래밍 14

char c;

0 0 0 0 0 0 0 0

7 6 5 4 3 2 1 0

bit LED

오른쪽 3번째 불 켜기

c = c | 4;

전체 불 다 켜기

c = ~ 0 ;

켜진 불을 왼쪽으로 2 칸 이동하기

c = c << 2 ;

켜진 불은 끄고 꺼진 불은 켜기

c = ~ c;

가장 오른쪽 불이 켜 져 있는지 확인하기 onoff = c & 1 ; 왼쪽 4개의 불 끄기

c = c & 0x0f ;

(15)

연산자 우선순위

강C프로그래밍 15

연산자 (높은 순서) 설명

++ -- (후치) 증감 연산자

++ -- (전치),

! ~ + -

증감 연산자 단항 연산자

* / % 산술 연산자

+ - 산술 연산자

<< >> 비트 연산자

< <= >= > 관계 연산자

== != 관계 연산자

& ^ | 비트 연산자

&& || 논리 연산자

= += -= *= /= %= &= ^= 대입 연산자

연산자 우선순위는 문장 해석에서 중요한 역할을 담당한다.

참조

관련 문서

[r]

국제무역이 가트체제에서 우루과이라운드체제를 거쳐 지금 은 WTO체제에서 이루어지고 있다.. WTO체제에서 FTA는 선택이

는 당해 도시계획시설이 설치되는 일단의 토지 다.. 지역적 특성 및 계획의 방향. 국토계획및이용에관한법률의 규정에 의한 도시지역 안에서 건축물· 골프연습장 기타

서로 다른 클래스 객체들 사이의 대입 상속 관계인 객체와 포인터의 관계 가상 함수.. 가상

입출력 연산자 오버로딩을 이용한 cin, cout의 구현 friend 함수를 사용한 입출력 연산자 오버로딩.

World Health Organization-International Society of Hypertension (WHO/ISH) hypertension guidelines. Giao R, Parillo M, Rivellese A, Lasoreua G, Giao A, D, Episcopo L, Riardi G.

① 私は 学生でもありません 。 ②これは本でも 雑誌でもありません。 ③ここはフランス でも ドイツ

But literary history has been so preoccupied with the setting of a work of literature that its attempts at an analysis of the works themselves have