Chapter 07 비트와 여러 연산자.

Slides:



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

Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
연산자와 표현식 C H A P T E R 3. 소개 C 에는 많은 내장 연산자가 있다 프로그램에서 연산자는 데이터와 변수 조작에 사용 C 연산자의 분류 1. 산술 연산자 2. 관계 연산자 3. 논리 연산자 4. 대입 연산자 5. 증가 감소 연산자 6. 조건 연산자 7.
재료수치해석 HW # 박재혁.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
쉽게 풀어쓴 C언어 Express 제5장 수식과 연산자 C Express.
쉽게 풀어쓴 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. 조건문.
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
쉽게 풀어쓴 C언어 Express 제5장 수식과 연산자 C Express.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
Chapter 04 C 연산자의 이해.
오브젝트 조합 회로 IT CookBook, VHDL을 이용한 디지털 회로 입문.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Part 05 순수한 연산자 ©우균, 창병모 © 우균, 창병모.
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 03. 변수와 연산자.
Tail-recursive Function, High-order Function
11장. 1차원 배열.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
상수와 기본 자료형.
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
연산자 (Operator).
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 02. 자바 기본 문법.
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
1. 2진 시스템.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
제3장 함수와 배열수식 전진환
Chapter08 JavaScript 시작하기
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
복습.
Chapter 10 데이터 검색1.
제 22 강 논리식 및 논리 값 shcho.pe.kr.
Numerical Analysis Programming using NRs
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 4 장 Record.
9장. spss statistics 20의 데이터 변수계산
어서와 C언어는 처음이지 제21장.
제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

Chapter 07 비트와 여러 연산자

조건 연산자 조건 삼항 연산자 조건 연산자는 C 언어에서 유일하게 세 개의 피연산자를 갖는 삼항 연산자 연산식 exp1이 0이 아닌 값(참을 의미)으로 평가되면, 삼항 연산자의 평가값은 두 번째 연산식인 exp2의 값으로 평가 연산식 exp1이 0(거짓을 의미)으로 평가되면 삼항 연산자의 평가값은 세 번째 연산식인 exp3의 값으로 평가 이 연산식은 변수 courses의 값이 1일 경우, 조건연산자의 평가 값은 문자 ‘A’이고 변수 courses의 값이 1이 아닌 경우, 평가 값은 문자 ‘B’ (courses == 1) ? ‘A’ : ‘B’

조건 연산자의 연산 위 연산식을 다음과 같이 대입연산자와 함께 이용하면 이 연산식은 변수 courses의 값이 1일 경우, answer의 값에 A를 할당하고, 1이 아닌 경우는 B를 할당 즉 아래 문장에서는 대입 연산자의 우선순위는 가장 낮기 때문에 우선 순위가 그 보다 높은 조건 연산자를 먼저 계산하여 그 결과를 변수 answer에 저장하는 역할을 수행 courses 변수 값이 1인 경우 courses 변수 값이 2인 경우 answer = (courses == 1) ? ‘A’ : ‘B’

조건 연산자의 이용 다음 문장은 변수 x의 절대값을 변수 absolute에 저장하는 문장 물론 위 문장은 아래와 같은 의미   물론 위 문장은 아래와 같은 의미 다음 문장은 두 수 x, y 중에서 큰 수를 변수 max에 저장하는 문장 두 수 x, y 중에서 작은 수를 변수 min에 저장하는 문장 조건 연산자를 출력 함수에 이용하면 두 수 x, y 중에서 큰 수를 출력 absolute = (x < 0) ? -x : x ; absolute = (x >= 0) ? x : -x ; max = (x > y) ? x : y; min = (x > y) ? y : x; printf(“%d”, ((x > y) ? x : y));

조건 연산자 이용 조건 연산자의 예 조건연산자를 이용하는 경우, 대입연산자 =와 관계연산자 ==를 잘 구분하여 이용 위 소스에서 출력 값은 0이다. 만일 아래와 같이 관계연산자 ==를 이용한다면 출력값은 1 그러므로 관계연산자 ==를 대입연산자 =와 주의하여 사용 연산식 결과 값 3 > 4 ? 3 : 4 4 ‘a’ > ‘b’ ? 1 : 0 x>y ? x>y : !(x>y) 1 10>0 ? 10 : -10 10 10>1 ? 1 : 10 int a = 0; printf(“%d”, (a = 0) ? 1 : 0); int a = 0; printf(“%d”, (a == 0) ? 1 : 0);

예제 소스 Maxmin.c 두 수 중에서 큰 수를 출력하는 기능을 조건연산자를 이용하여 전처리기 지시자 #define으로 MAX 매크로 정의   #define MAX(x, y) ((x < y) ? y : x) 두 수 중에서 작은 수를 출력하는 조건연산자는 출력문에 기술 printf("%d\n", a < b ? a : b); 위 두 문장을 이용하여 변수 a, b에 각각 정수 값을 저장하여 큰 수와 작은 수를 출력하는 프로그램

비트 논리 연산자 비트 논리 연산자는 피연산자 정수 값을 비트 단위로 논리 연산을 수행하는 연산자 비트 논리 연산자는 &, |, ^, ~ 네 가지   비트 연산자 ^는 배타적 논리합(exclusive or) 연산자 피연산자의 비트 단위로 각각 0 또는 1로 구성되는 값의 비트 연산자의 결과는 다음과 같은 0이나 1의 비트 값의 결과를 구성 연산자 기호 의미 AND OR XOR NOT x & y x | y x ^ y ~x 연산자 왼쪽 값과 오른쪽 값의 비트 단위의 AND 연산 연산자 왼쪽 값과 오른쪽 값의 비트 단위의 OR 연산 연산자 왼쪽 값과 오른쪽 값의 비트 단위의 XOR 연산 단일 연산자로서 연산자 오른쪽 값의 비트 단위의 NOT 연산 x y AND 연산자 결과 OR 연산자 결과 XOR 연산자 결과 Not 연산자 결과 x & y x | y x ^ y !x 1

논리곱 비트 연산 비트 연산자는 0과 1만으로 구성된 이진수 각 자리에 대해 연산을 하며, 그 결과도 0 또는 1 예를 들어 비트 논리곱 연산자인 &는 두 수의 자릿수가 모두 1일 때만 1이고, 그 이외에는 0이 되는 연산을 수행 연산 3 & 5 피연산자인 3과 5를 각각 이진수로 표현한 각각의 비트를 and 연산으로 수행한 결과의 정수값이 평가값, 즉 1 연산 7 & 5 결과 ?

예제 소스 bitlogic.c 사용자 입력 정수 x와 y를 표준입력으로 두 개의 변수에 저장 두 개의 변수에 대하여 AND, OR, XOR, NOT 비트 연산을 수행한 결과를 다음 그림과 같이 출력하는 프로그램을 작성

오른쪽 이동 연산자(shift right) 이동연산자는 비트 단위로 왼쪽이나 오른쪽으로 이동시키는 연산자 C 언어에서는 다음 두 가지의 이동(shift) 연산자를 제공 연산자 기호 의미 왼쪽 이동 연산자(shift left) 오른쪽 이동 연산자(shift right) << >> 비트를 왼쪽으로 이동 비트를 오른쪽으로 이동

Shift left 7 << 2 위 연산은 좌변의 피연산자인 7의 이진수 표기 값을, 우변에 지정한 숫자만큼 왼쪽으로 옮기라는 연산을 의미

Shift right 7 >> 2 위 연산은 좌변의 피연산자인 7의 2진수 표기 값을, 우변에 지정한 숫자만큼 오른쪽으로 옮기라는 연산을 의미

비트 이동 연산의 주의 부호 비트의 처리 간편 계산 오른쪽 이동 연산자 >>는 비트 이동으로 비게 되는 왼쪽 비트들을 원래의 첫 번째 피연산자의 최상위 부호 비트로 채우는 것이 원칙 그러므로 unsigned int 형 정수인 경우는 왼쪽 상위 비트들이 모두 무조건 0으로 채움 다음은 signed int인 음수 -7을 오른쪽으로 2비트 이동 연산의 예로 그 결과는 -2 간편 계산 오른쪽 이동 연산자는 첫번째 피연산자가 양수인 경우 비트 이동을 한 번 할 때마다 첫 번째 피연산자를 2로 나누는 효과 a >> b 의 결과는 a / 2b (a가 양수인 경우) 왼쪽 이동 연산자는 비트 이동을 한 번 할 때마다 첫 번째 피연산자를 2로 곱하는 효과 a << b 의 결과는 a * 2b

예제 소스 shift.c 표준입력으로 입력 받은 사용자 입력 정수 두 개를 변수 x와 y에 저장 이 변수의 값을 피연산자로 이용해서 왼쪽, 오른쪽 이동 연산자의 수행 결과를 각각 적절하게 출력

측정 비트 값 알기 자료형 int 변수에 저장된 값 2를 모든 비트의 이진수로 표현하면 00000000 00000000 00000000 00000010 정수 값의 비트 내부 표현에서 특정한 비트의 값을 알아 내는 방법은 무엇일까? 즉 위 수에서 가장 오른쪽 최하위 비트를 쉽게 알 수 있는 방법을 생각 변수 a에 저장된 값의 최하위 비트의 값을 출력하는 소스 변수 mask를 이용하여 비트 논리 and 연산을 수행하는 과정 2(a) 00000000 00000000 00000000 00000010 1(mask) 00000000 00000000 00000000 00000001 a & mask 00000000 00000000 00000000 00000000 변수 mask가 1인 경우, 조건식 (a & mask) ? 1 : 0은 비트 논리식 (a & mask)으로 기술해도 결과는 같으나 최하위 비트 뿐 아니라 원하는 특정 비트의 값을 알아내는 식으로 기술하기 위하여 이와 같은 조건식으로 기술 int a = 2; int mask = 1; printf(“%d”, (a & mask) ? 1 : 0);

비트 마스크 Bit mask 어떤 값에서 특정 비트의 값을 알려면 위에서 살펴보았듯이 그 해당 비트만 1, 그 외 모든 비트는 0을 갖는 마스크를 이용하여 비트 and 연산을 수행하면 결과를 얻음 정수 10의 최하위부터 4번째 자리의 비트 값을 알아내는 소스 변수 mask에는 최하위부터 4번째 자리의 비트 값만이 1인 8을 저장하여 사용 이 값을 직접 8을 기술하지 말고, 비트 이동 연산자를 이용하여 1 << 3으로 기술 가능 10(a) 00000000 00000000 00000000 00001010 8(mask) 00000000 00000000 00000000 00001000 a & mask 00000000 00000000 00000000 00001000 int a = 10; int mask = 8; // mask = 1 << 3; printf(“%d”, (a & mask) ? 1 : 0);

비트 마스크 특정 비트를 알아 내는 일반식 다른 비트 마스크 변수 a에 저장된 값의 최하위부터 n번째 자리의 비트 값을 알아내는 조건식 특정 값의 최하위부터 n번째 자리의 비트 값을 알아내는 마스크가 1<<(n-1) 다른 비트 마스크 원하는 특정 비트를 1로 지정하려면 해당 비트만을 1로 하는 마스크를 이용하여 비트 or 연산을 수행하면 결과를 얻는다. 원하는 특정 비트를 0으로 지정하려면, 해당 비트만을 1로 하는 마스크를 비트 부정하여 비트 and 연산을 수행하면 결과를 얻는다 원하는 특정 비트를 반대로 하려면 해당 비트만을 1로 하는 마스크를 이용하여 비트 xor 연산을 수행하면 결과를 얻는다 (a & (1<<(n-1))) ? 1 : 0

비트 마스크 정리 변수 a의 최하위부터 n번째 자리의 비트 연산식 의미 원하는 특정 비트를 알아 내려면 그 해당 비트만 1, 그 외 모든 비트는 0을 갖는 마스크를 이용하여 비트 and 연산을 수행 원하는 특정 비트를 1로 지정하려면 (a | (1 << n-1)) a |= (1 << n-1) 해당 비트를 1, 그 외 모든 비트는 0을 갖는 마스크를 이용하여 비트 or 연산을 수행 원하는 특정 비트를 0으로 지정하려면 (a & ~(1 << n-1)) a &= ~(1 << n-1) 해당 비트를 1, 그 외 모든 비트는 0을 갖는 마스크를 비트 부정하여 비트 and 연산을 수행 원하는 특정 비트를 반대로 하려면 (a ^ (1 << n-1)) a ^= (1 << n-1) 해당 비트를 1, 그 외 모든 비트는 0을 갖는 마스크를 이용하여 비트 xor 연산을 수행

예제 소스 bitmask.c 표준입력으로 입력 받은 양수 하나와 음수 하나의 최상위 비트의 값을 알아내는 프로그램을 작성 입력 정수는 int 형 변수에 저장하고, 마스크를 변수 mask에 저장 자료형 int는 개발도구에 따라 32비트나 16비트, 마스크를 적당히 이용 여기서는 32비트 이름로 1 << 31을 이용 mask = 1 << 31; // 1 << 15;

변수나 자료형의 크기 연산자 sizeof 우선 순위 변수나 변수형 또는 배열의 저장장소의 크기(바이트 단위)를 구하는 연산자 연산자 sizeof는 위와 같이 키워드 뒤에 자료형이나 변수명을 이용하여 사용하는데, int와 같은 자료형을 기술하는 경우 반드시 괄호를 이용 연산자 sizeof의 값은 실행 환경에 따라 달라질 수 있다. 왜냐하면 C 언어는 컴파일러마다 자료형에 따른 저장공간의 크기가 다르기 때문 우선 순위 연산자 sizeof는 단항 연산자로서 어떠한 이항 연산자보다 우선 순위가 빠름 sizeof (자료형) sizeof 변수명 int myAge = 10; printf(“%d\n”, sizeof myAge); printf(“%d\n”, sizeof (short));

예제 소스 sizeof.c 연산자 sizeof를 이용하여 int, long, float, double, char 변수형의 크기를 출력 자료형 int, long, float, double, char를 피연산자로 sizeof 연산의 결과를 출력

형 변환 통일된 자료형으로 연산 형 넓히기(promotion) 일반적으로 C 언어의 연산식에서 여러 피연산자의 자료형이 서로 다른 경우, 하나의 통일된 자료형으로 자동 변환하여 연산을 수행 표현의 크기가 작은 int 형 3을 4.0과 같은 double 형으로 변환하여 계산, 3.0 + 4.0을 연산하여 결과는 7.0 형 넓히기(promotion) 형 넓히기는 크기가 작은 형을 크기가 큰 형으로 변환하는 것을 말하며 컴파일러에 의해 자동으로 실행될 수 있음

형 변환 연산자 형 좁히기 형 넓히기와는 반대로 형을 좁히려면 형 좁히기 (demotion)를 해야 하는데, 이 내림 변환은 일반적으로 형 변환 연산자를 이용하여 수행 그러나 다음과 같은 대입문에서는 컴파일러가 자동으로 내림 변환을 수행하여 변수 a에는 정수 값인 11만이 저장 대부분의 컴파일러는 이러한 내림 변환의 경우, 정보의 손실이 예상되므로 컴파일 중 경고를 발생 그러므로 가능하면 내림 변환에는 형 변환 연산자 이용을 권고 형 변환 연산자 피연산자의 값을 앞 위치의 괄호 안에서 지정한 자료형으로 변환하는 연산 int a = 11.4; (자료형) 피연산자 (int) 30.5

변환 연산의 이용 다음 소스에서 변수 Result의 값은 마지막 연산식이 다음이면 결과는 1.5 마지막 연산식이 다음이면 결과는 1.0 int X; int Y; double Result; X = 6; Y = 4; Result = (double)X / (double)Y; Result = (double)X / Y; Result = X / (double)Y; Result = X / Y;

예제 소스 Cast.c 자료형 double 형 변수 x, y에 각각 1.2와 1.9를 저장한 후 여러 더하기 연산 후, 결과 값을 출력

축약 대입 연산자 += 등 10가지 대입 연산자인 =와 산술 연산자인 +를 합쳐 놓은 듯한 연산자 +=을 축약 대입 연산자 축약 대입 연산자도 대입 연산자이므로 왼쪽 피연산자 부분에는 반드시 변수만이 올 수 있고, 연산의 의미도 대입 연산자인 =와 산술 연산자인 +를 합쳐 놓은 의미와 비슷하다. 축약 대입 연산자 x += y의 연산 방법은 변수 x 이전 값에다 오른쪽의 연산식 y에 의하여 평가된 결과 값을 연산(더하기)하여, 새롭게 수정된 값이 변수 x에 대입 축약 대입 연산자는 산술 이항 연산자와 비트 이항 연산자가 각각 대입연산자와 결합하여 구성 축약 대입 연산자 의미 x += y x = x + y x -= y x = x - y x *= y x = x * y x /= y x = x / y x %= y x = x % y x &= y x = x & y x |= y x = x | y x ^= y x = x ^ y x >>= y x = x >> y x <<= y x = x << y x += y 변수 += 연산식 x = x + y

축약 대입 연산자 이용 간편성 축약 대입 연산자는 소스를 간결히 하며, 긴 연산식보다 효율적인 소스를 작성 다음 주 문장은 같은 의미 대입 연산자의 우선 순위는 연산자 중에서 가장 낮아 오른쪽 수식을 모두 계산한 이후의 값을 x에 연산하여 그 값을 대입 그러므로 아래의 소스에서 x에는 19가 저장 즉 위 마지막 문장은 다음 문장을 의미한다. x = x + 3 * 4; x += 3 * 4; x = 3; y = 4; x += y + 3 * 4; x += x + (y + 3 * 4);

예제 소스 shortassign.c 사용자 입력 정수 x와 y를 표준입력으로 두 개의 변수에 저장 두 개의 변수에 대하여 +=, -=, *=, /=, %=의 산술 축약 대입 연산자와 &=, |=, ^=, <<=, >>= 비트 축약 대입 연산을 수행한 결과를 다음 그림과 같이 출력하는 프로그램을 작성

우선 순위 수학에서와 같은 우선 순위 수학에서도 곱하기나 나누기 연산자가 더하기나 빼기 연산자보다도 우선 순위가 더 높은 것처럼 C 언어에서도 연산자 사이에 우선 순위가 존재 우선 순위 연산자 계산 방향(결합법칙) 1 () [] . -> a++(후위) a–(후위) -> (좌에서 우로) 2 ++a(전위) –a(전위) ! ~ sizeof (형) -(단항) +(단항) &(주소) *(역참조, 간접) <- (우에서 좌로) 3 * / % 4 + - 5 << >> 6 < > <= >= 7 == != 8 & 9 ^ 10 | 11 && 12 || 13 ?: 14 = += -= *= /= %= <<= >>= &= |= ^= 15 ,(콤마 연산자)

주요 우선 순위 연산자의 주요 우선 순위 대입 < 조건 < 논리 < 비트 < 관계 < 이동 < 산술 < 단항 주요 단어 의미 괄호 괄호가 가장 우선순위가 높다. 따라서 연산의 우선 순위가 기억이 나지 않는다면 괄호를 사용해서 연산 우선권을 강제로 지정하는 것이 좋다. 단항 모든 단항 연산자는 어느 이항 연산자보다 먼저 계산한다. 이항 대입연산자를 제외한 모든 이항 연산자는 삼항 연산자인 조건 연산자(?:)보다 먼저 계산한다. 대입 콤마 연산자를 제외하고는 대입연산자를 제일 나중에 계산한다. 산술 산술연산자의 우선 순위가 관계 연산자나 논리 연산자보다 높다.

콤마 연산자 , 이용 연산자의 순위에서 가장 낮은 연산자는 콤마 연산자 콤마(쉼표) 연산자는 좌에서 우로 연산을 수행하며, 그 반환 값은 마지막에 수행한 연산의 결과 이용 int x; x = 3 + 4, 5 - 10; //위 문장은 (x = 3+4), 5-10;을 의미하여 // x에는 7이 저장, 5-10은 의미 없는 구문 printf("%d\n", x); // 출력 값은 7 int x; x = (3 + 4, 5 – 10); //위 문장은 콤마 연산자를 먼저 수행해 5-10의 결과를 // x에 저장, 그러므로 -5가 x에 저장 printf("%d\n", x); // 출력 값은 -5

예제 소스 Priority.c 정수형 네 개의 변수에 다음을 저장하고, 여러 연산식의 결과를 알아보자. 예제 소스 Priority.c 정수형 네 개의 변수에 다음을 저장하고, 여러 연산식의 결과를 알아보자. int x = 3, y = 4, m = 6, n = 9;

프로그램 연습 프로그램 목적 구현 문자의 아스키 코드 값의 내부 표현을 이진수 그대로 출력하는 프로그램을 작성 문자 하나는 표준입력으로 받아 적당한 마스크를 이용하여 각각의 비트를 모두 출력하는 방법으로 처리 구현 문자 자료형인 char는 1바이트 8비트이므로, 8개의 8비트를 각각 구하여 출력 즉 변수 ch에 저장된 문자의 최상위 비트를 출력하려면 다음 소스를 이용 위와 같은 소스를 부분 수정하여 모두 8번 반복하면 8비트를 모두 출력 printf("%d ", (ch & (1 << 7)) ? 1 : 0);

소스와 결과