정보처리기사/프로그래밍 언어 활용

프로그래밍 언어 활용 2

RangA 2023. 5. 29. 18:52

02. C언어의 연산자

01. C언어의 연산자 개념

1) 항과 연산자

  1. 단항 연산자 : 하나의 항으로만 연산이 됨
  2. 이항 연산자 : 두 개의 항으로 연산이 됨
  3. 삼항 연산자 : 세 개의 항으로 연산이 됨

2) 묵시적 순서 제어와 명시적 순서 제어

1. 묵시적 순서 제어

  • 프로그래머가 아무런 조치를 취하지 않아도 이미 정해진 규칙의 의해서 제어됨
  • 프로그램 언어에서 미리 정해진 순서에 따라서 제어가 일어나는 것을 의미함
  • 괄호 없이 연산자의 우선순위에 따라 계산함

2. 명시적 순서 제어

  • 프로그래머가 원하는 제어를 위해 직접 조치를 취하는 제어
  • 각 문장이나 연산의 순서를 프로그래머가 직접 변경함
  • 괄호를 이용하여 연산 순서를 변경하는 계산
  • GOTO문이나 반복문을 사용해서 문장의 실행 순서를 변경함

3) C언어의 연산자 우선순위

  • C언어의 연산자 우선순위는 묵시적으로 정해져 있음
  • 덧셈 연산자와 곱셈 연산자가 혼합되어 수식이 이루어졌다면 곱셈 연산자가 우선 연산됨
  • 우선순위를 변경하려면 괄호를 이용해 변경할 수 있음
  • 덧셈 연산자와 뺄셈 연산자는 동일한 우선순위를 갖는 연산자
  • 동일한 우선순위를 갖는 연산자는 연산자에 따라 좌측에서 우측으로 혹은 우측에서 좌측으로 결합됨
  • 덧셈 연산자와 뺄셈 연산자가 혼합된 연산 수식에서는 좌측에서 우측으로 결합 순서가 정해져 있음



02. C언어의 연산자 종류

1) ++, -- 연산자

  • 증감 연산자
    • 1씩 증가하거나 감소하는 연산자
    • ++ 연산자나 -- 연산자는 변수 앞에 있으면 전위 연산자, 변수 뒤에 있으면 후위 연산자라고 함

2) -, !, ~, sizeof 연산자

  1. - 연산자
    • 변수의 부호를 바꾸는 연산자
  2. ! 연산자
    • 참, 거짓을 바꾸는 연산자
    • C언어에서는 참과 거짓을 표현하는 논리형 상수도 논리형 변수도 존재하지 않음
    • 0이면 거짓, 1이면 참으로 판단하고, 0이 아니면 모두 참으로 판단함
    • 논리식의 결과도 참이면 1, 거짓이면 0 값을 갖게 됨
  3. ~ 연산자
    • 변수와 상수를 이진수로 풀어서 비트 하나하나를 대상으로 연산함
    • 하나의 비트가 0이면 1로, 1이면 0으로 변환함
  4. sizeof() 함수
    • 변수나 상수의 byte 수를 반환하는 함수
    • sizeof() 함수 안에는 변수 선언 예약어, 변수명, 상수를 인수로 사용하면 해당되는 유형의 길이를 반환함
    • 05 : 문자형이므로 모두 "1 1 1"이 출력됨
    • 06 : 정수형 int가 2byte이면 모두 "2 2 2"가 출력됨
    • 07 : 정수형 long이 4byte이면 모두 "4 4 4"가 출력됨

3) &, * 연산자

  1. & 연산자
    • 변수의 절대 번지를 표현하는 번지 지정 연산자
    • 연산자
      • 포인터 변수를 선언하거나 포인터의 내용을 표현하는 간접 연산자
      • 간접 연산자 *는 사용하는 위치에 따라 사용상의 의미가 다름
        • 선언부 : 포인터 변수로 선언함
        • 처리부 : 포인터 변수가 기억하고 있는 절대 번지의 내용을 가리킴

4) 산술 연산자

  1. 사칙 연산
    • +, -, *, / 외에 나머지 연산자 %가 존재함
  2. 몫과 나머지 연산자
    • / 나눗셈 연산자로 혹은 몫을 계산하는 연산자로 사용하기도 함
    • % 연산자는 나머지 연산자로 피연산자가 모두 정수형이어야 함

5) <<, >> 연산자

  • 시프트 연산자
    • 변수와 상수를 이진수로 풀어서 비트 하나하나를 대상으로 연산함
    • 비트 값들을 좌측 또는 우측으로 위치를 이동하는 산술 시프트 연산자
    • a << n
      • 결과 공식 : a × 2n
      • 변수 a를 n비트 만큼 좌 시프트함
    • a >> n
      • 결과 공식 : a ÷ 2n
      • 변수 a를 n비트 만큼 우 시프트함

6) 관계 연산자

  1. 관계 연산자
    • 크기를 비교하는 연산자로 참이면 1(True), 거짓이면 0(False) 값을 가짐
    • >, >=, <, <=, ==, !=가 있음
  2. 관계 연산자의 우선 순위
    • ==, !=는 다른 관계 연산자보다 우선 순위가 항상 느림

7) 비트 논리 연산자

  • 변수와 상수를 이진수로 풀어서 비트 하나하나를 대상으로 연산함
  • 비트 논리 연산자 종류
    • a & b(비트 AND) : 대응되는 비트가 한쪽이라도 0이면 0
    • a | b(비트 OR) : 대응되는 비트가 한쪽이라도 1이면 1
    • a ^ b(비트 XOR) : 대응되는 비트가 같으면 0, 다르면 1

8) 논리 연산자

  • 변수와 상수를 대상으로 연산하여 참, 거짓을 논리적으로 판단함
  • 논리 연산자 종류
    • a && b(AND) : 한쪽이라도 거짓이면 거짓으로 0이 됨
    • a || b(OR) : 한쪽이라도 참이면 참으로 1이 됨
  • 논리 연산자의 연산 우선순위는 &&, || 순
  • 논리 연산자는 수식 처리가 중단될 수 있음
  • 참, 거짓을 판단할 수 있으면 더 이상의 수식을 판단하지 않음

9) 삼항 연산자

  • 항이 3개 있는 연산자로 참, 거짓에 따라 수행할 명령문이 선택됨
  • 조건식 ? A : B 의 형태로 조건식이 참이면 A 명령문, 거짓이면 B 명령문을 수행함

10) 대입 연산자

  • 우측에 있는 변수, 상수, 수식의 결과 값을 좌측 변수에 기억시키는 명령
  • 대입 연산자는 +=, -=, *=, /=, &= 등이 있음

11) 콤마 연산자

  • 동일한 유형의 명령문이나 자료를 나열하는 데 사용하는 연산자
  • 콤마 연산자는 좌측에서 우측으로 결합 순서를 가짐

12) 캐스트 연산자

  • 변수의 타입을 실행 중에 변경할 수 있는 연산자
  • "(타입) 자료형" 형태로 사용함