ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 연산자①
    C 2023. 3. 22. 12:16

     

     

    연산식과 다양한 연산자


     

    연산식과 연산자 분류

    • 연산식 (expression) 
      • 변수와 다양한 리터럴 상수 그리고 함수의 호출 등으로 구성되는 식 
      • 항상 하나의 결과값을 갖는다.

     

    • 연산자 (operator) : + - * /  
      • 이미 정의된 연산을 수행하는 문자 또는 문자조합 기호 

     

    • 피연산자 (operand)  
      • 연산(operation)에 참여하는 변수나 상수 

    (출처: Perfect C,강환수,강환일,이동규지음(인피니티북스))

     


     

    다양한 연산자 

    • 단(일)항(unary), 이항(binary), 삼항(ternary) 연산자 
      • 연산자는 연산에 참여하는 피연산자(operand)의 갯수에 따라 구분
        • 부호를 표시하는 +, -는 단항연산자
        • 덧셈, 뺄셈의 +, -, *, / 등의 연산은 이항연산자
        • 삼항연산자는 조건연산자 ' ? : '가 유일

     

    • 단항연산자
      • 연산자의 위치에 따라 전위와 후위로 나뉜다.
        • ++ a : 전위, 연산자가 앞에 있는 전위(prefix) 연산자 
        • a ++ : 후위, 연산자가 뒤에 있는 후위(postfix) 연산자

     

    단항 연산자
    
    연산자 | 피연산자	(전위:prefix)
    ++a : 전위 증가연산자
    sizeof(int) : sizeof 연산자
    (int) 3.46 : 자료형 변환연산자
    -3 : 부호연산자
    
    피연산자 | 연산자	(후위:postfix)
    b-- : 후위 감소연산자
    a++ : 후위 증가연산자
    이항 연산자
    
    피연산자1 | 연산자 | 피연산자2
    a % 3
    3 && 4
    5 >= 7
    삼항 연산자
    
    피연산자1 ? 피연산자2 : 피연산자3
    (5 >= 7) ? (3+5) : (10/2)

     

     


     

    산술연산자와 부호연산자 

    • 산술연산자 : +, -, *, /, %
      • % 나머지(remainder, modulus) 연산자
        • 피연산자로 정수만 가능
        • 나누기 연산식 10 / 4는 연산값이 2  
      • 정수끼리의 나누기 연산(/) 결과는 소수 부분을 버린 정수
        • 실수끼리의 연산 10.0 / 4.0 결과는 2.5
      • 나머지 연산식 a % b
        • 결과는 a를 b로 나눈 나머지 값
        • %의 피연산자는 반드시 정수
        • 실수이면 오류 발생
    3 / 2 * 2 → 연산값: 2
    먼저 계산하는 3/2가 1이므로 전체 연산값은 2
    
    3 / (2 * 2) → 연산값: 0

     

    • 부호 연산자: 단항 연산자
      • 연산식 +3, -4.5, -a
      • 수, 변수의 부호로 표기하는 연산자
    연산식 설명 연산값 연산식 설명 연산값
      - a   부호연산자  10   - b + 2.5   부호연산자  0.0
      2 - a   빼기연산자  -3   a / b + b * 2   ( a / b ) + ( b * 2 )  5.0
      2 * a + 3   ( 2 * a ) + 3   13   a * 2 / b - a   ( ( a * 2 ) / b ) - a  -1.0
      10 - a / 2   10 - ( a / 2 )  8   a + b * 2 / a   a + ( ( b * 2 ) / a )  6.0
      10 % a + 10 / a   (10 % a) + (10 / a)  2   a % b    실수는 %에 오류  오류

     

    #include <stdio.h>
    
    int main(void) {
    
    	int a, b, c;
    	a = b = c = 5;
    
    	printf("a = a + 2 → %d\n", a = a + 2);
    	printf("a → %d\n\n", a);
    	printf("a = b + c → %d\n", a = b + c);
    	printf("a → %d", a);
    
    	return 0;
    }
    a = a + 2 → 7	  //대입연산자의 결합성은 오른쪽에서 왼쪽으로 수행
    a → 7
    
    a = b + c → 10	  //대입연산식의 연산값은 대입된 저장값
    a → 10

     

     


     

    대입연산자 (assignment operator) =

     

    • 오른쪽의 연산식 exp의 결과값을 왼쪽 변수 var에 저장하는 연산자
      • 오른쪽을 의미하는 right 단어에서 r-value

     

    • 대입연산자의 왼쪽 부분에는 반드시 하나의 변수만이 올 수 있음
      • 하나의 변수를 왼쪽을 의미하는 left 단어에서 l-value

    대입연산자 수행 방법 (출처: Perfect C,강환수,강환일,이동규지음(인피니티북스))

     

     

    • a = b = c = 5 와 같은 중첩된 대입문
      • 대입연산자의 결합성이 '오른쪽에서 왼쪽(←)'이므로 많은 변수에 동일한 값을 한 번에 대입
      • 즉 변수 a, b, c 모두 값 5 저장
      • 연산값은 마지막으로 a에 저장된 값인 5
    int a, b, c;
    
    a = b = c = 5 ; → (a = (b = (c = 5)))

     

     


     

    축약 대입연산자 = 

    • +=, -=, *=, /=, %=
    • 산술연산자와 대입연산자를 이어 붙인 연산자
    • 대입연산식 a = a + b을 중복된 a를 생략하고 간결하게 a += b 

    축양 대입연산자의 연산 방법&nbsp;(출처: Perfect C,강환수,강환일,이동규지음(인피니티북스))

    #include <stdio.h>
    #include <math.h>
    #define _CRT_SECURE_NO_WARNINGS
    #pragma warning (disable:4996)
    
    int main() {
    
    	int a, b;
    
    	printf("number:");
    	scanf("%d", &a);
    	printf("number for +:");
    	scanf("%d", &b);
    	printf("number is %d\n", a += b);
    
    	printf("number for -:");
    	scanf("%d", &b);
    	printf("number is %d\n", a -= b);
    
    	printf("number for *:");
    	scanf("%d", &b);
    	printf("number is %d\n", a *= b);
    
    	printf("number for /:");
    	scanf("%d", &b);
    	printf("number is %d", a /= b);
    
    	return 0;
    }
    number:8
    number for +:5
    number is 13
    number for -:7
    number is 6
    number for *:5
    number is 30
    number for /:3
    number is 10

     

     


     

    증가 감소 연산자

     

    • 증가연산자 ++
      • 변수값을 각각 1 증가
        • n++ : 후위(postpix)
          • 1 증가되기 전 값이 연산 결과값
        • ++n : 전위(prepix)
          • 1 증가된 값이 연산 결과값

     

    • 감소연산자 --
      • 변수값을 각각 1 감소
        • n-- : 후위(postpix)
          • 1 감소되기 전 값이 연산 결과값
        • --n : 전위(prepix)
          • 1 감소된 값이 연산 결과값
    • 주의
      • 연산자 기호 중간에 공백이 들어갈 수 없다.
      • 증감연산자는 변수만을 피연산자로 사용할 수 있다.
      • 상수나 일반 수식을 피연산자로 사용할 수 없다.
        • ex) ++300;, (a+1)--;
        • a = ++a * a-- 하나의 연산식에 동일한 변수의 증감연산자를 사용하면 값은 나오나 사용하지 않기. 
    #include <stdio.h>
    
    int main() {
    	int m, n;
    	m = n = 3;
    	
    	printf("m++ ++n : %d %d\n", m++, ++n);
    	printf("m n : %d %d\n", m, n);
    	printf("m-- --n : %d %d\n", m--, --n);
    	printf("m n : %d %d", m, n);
    
    	return 0;
    }
    m++ ++n : 3 4
    m n : 4 4
    m-- --n : 4 3
    m n : 3 3

     

     

     

     

     

    'C' 카테고리의 다른 글

    [C] 연산자② - 관계와 논리, 조건과 비트연산자  (0) 2023.04.01
    [c] 조건  (0) 2023.03.29
    [C] 전처리와 입출력  (1) 2023.03.17
    [C] QUIZ  (0) 2023.03.15
    [C] C 프로그래밍 첫걸음  (4) 2023.03.08
Designed by Tistory.