[Warming up C Programming] chapter 4 : 연산자

eunee22·2023년 7월 8일
0

Warming-up C Programming

목록 보기
4/10
post-thumbnail

제가 대학교 1학년 때 C언어 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다. (2022.3 ~ 2022.6)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.

대학에 처음 들어와 정리한 내용이라 모든 내용을 담고 싶은 욕심에 정리가 많이 지져분하고 어설픈점 양해 부탁드립니다..!

🍑연산자의 기본 개념

연산자

: 연산에 사용되는 기호

  • c에서는 특별한 의미가 있는 문자 하나 또는 2개를 연산자로 사용.
  • 이때, 문자 사이에 공백이 있어서는 안된다.

수식

: 값이 있는 요소
ex) 상수, 변수, 연산식

연산식

: 연산자와 피연산자의 조합으로 만들어진 코드 (연산자와 하나 이상의 피연산자)

  • 수식을 평가한다 : 수식의 값을 구하는 것

  • 피연산자 : 연산의 대상이 되는 것
    1. 단항 연산자 : 피연산자가 1개
    ex) +x –x ++x --x x-- x++ !x &x ~x sizeof(x)
    2. 이항 연산자 : 피연산자가 2개
    ex) 산술 연산자, 대입 연산자, 관계 연산자, 논리 연산자, 비트 연산자
    3. 삼항 연산자 : 피연산자가 3개
    ex) ?(조건 연산자)

🍑연산자의 종류

산술 연산자

  • +x : 플러스(부호)

  • -x : 마이너스(부호)

  • x + y : 더하기

  • x – y : 빼기

  • x * y : 곱하기

  • x / y : 나누기

    • 정수 / 정수의 결과는 나머지를 버리고 몫(정수)만 결과로 사용
    • 실수 / 실수 = 실수 즉, 정수끼리의 연산결과는 정수이다.
    • 덧셈이나 뺄셈 같은 경우 정수와 실수의 연산도 가능
  • x % y : 나머지 구하기

    • 피연산자가 정수인 경우만 사용함
    • %는 문자열에서 서식지정자를 지정하는데 이용되므로 %문자를 출력하려면 “” 안에 %%를 적어주어야함.
  • 피연산자의 형 변환

    • 이항 연산자를 이용하는 연산식에서 피연산자의 데이터형이 서로 다르면 피연산자를 같은형으로 변환한 다음 연산 수행

    • 피연산자 중 하나가 실수형이면, 실수형으로 형변환.

    • 실수 * 정수 일때 정수에 대한 임시 실수 데이터를 생성.

      • 원칙은 에러이지만 경우가 너무 많음

      • 정수의 승격 : 피연산자가 둘다 char형이거나 short형일 때 int형으로 형 변환 후 연산

        • 임시 공간은 사용하려는 데이터가 정수이면 무조건 int에 할당해서 사용.
        • 단항 연산자에 대해서도 수행.

증감 연산자

: 변수의 값을 1만큼 증가, 감소 시키는 단항 연산자

  • 변수에만 사용할 수 있고 상수나 수식에는 사용할 수 없다.

  • 단일 문장일때는 전위형과 후위형의 연산결과가 같지만, 다른 문장의 일부로 사용시 다름.

  • 실수형 변수에서도 사용가능.

    • 1.0 씩 증가

1. 전위형 : 먼저 변수의 값을 증가/감소 시킨 후 변수의 값이 연산의 결과가 됨

  • 증감 연산자를 피연산자의 앞에 사용

2. 후위형 : 변수의 값이 증가/감소 되기 이전에 변수의 값이 연산의 결과가 되고, 다음 문장으로 넘어가기 전에 변수가 증가/감소

  • 증감 연산자를 피연산자의 뒤에 사용

대입 연산자

: 좌변에 있는 변수에 우변의 값을 저장

  • 변수명 = 값 형식으로 사용. 좌변에는 l-value만 사용 가능

  • 메크로 상수나 const 변수에는 대입할 수 없다.

  • 다른 연산자보다 우선순위가 낮다

  • 연산식의 결과는 할당 연산이 수행되어 저장되어 있는 l-value 변수의 값을 의미

  • r-valuel-value의 변수 또는 최종 연산 결과를 메모리에 저장.

    • l-value : 해당 변수의 메모리 영역
    • r–value : l-value 와 비교해서 값이 있는 수식
  • 복합대입 연산자 : 산술/비트 연산자와 대입 연산자를 결합한 것
    ex) x += y x -= y x *= y x /= y x %= y x &= y x|=y x ^= y x <<= y x >>= y

관계 연산자

: 두 수의 값을 비교하기 위한 연산자

  • 관계 연산자의 값은 항상 또는 거짓(0 또는 1)

  • 주로 조건식으로 사용
    ex) x > y x >= y x<y x<= y x == y x != y

  • 주의 사항

    • === 잘 구분해서 사용
    • 관계 연산자 조합시 논리 연산자 함께 사용
    • A != 0A 는 같은 의미 (조건식의 () 안에서)
    • 관계/논리 연산의 결과는 0, 1로 출력되지만, if(‘참/거짓 구분식’) 의 ‘참/거짓 구분식’ 에 단독으로 변수가 오는 경우에는 0false, 0이 아니면 true로 평가

논리 연산자

: 참/거짓을 이용한 논리 연산 기능을 제공

  1. x && y → 둘다 0이 아니면 1 그렇지 않으면 0
  2. x || y → 둘 중 하나라도 0이 아니면 1, 둘다 0이면 0
  3. !x → x가 0이면 1, 1이면 0
  • 값은 항상 0 또는 1이다.

  • 논리연산식에서 피연산자가 0이 아니면 참(1)으로 간주

  • 주의 사항

    • && || 연산보다 관계 연산을 먼저 수행
    • ! 연산은 관계 연산보다 먼저 수행
    • && 연산이 || 연산 보다 먼저 수행
    • A == 0!A와 같은 의미
      • 0인지 비교하는 연산자 대신 ! 연산자를 사용할 수 있음

비트 연산자

조건 연산자

: 피연산자가 3개인 삼항 연산자

  • expr1 ? expr2 : expr3에서 expr1이 참이면 expr2, 거짓이면 expr3이 연산의 결과가 됨
  • if문으로도 작성 가능함

형 변환 연산자

  • 형 변환 : 값의 데이터형을 변경하는 것

1. 암시적인 형 변환(자동형 변형 or 묵시적 형 변환)

: 눈에 보이지 않게 데이터 타입이 변경된단 의미

  • 서로 다른 데이터형의 값을 혼합 연산할 때 일어남.

  • 변수의 초기화나 대입에서도 발생

    • 우변의 값을 좌변의 데이터형에 맞추어 형 변환, 값이 손실되면 컴파일 경고
  • 피연산자의 데이터형이 다르면 피연산자의 데이터형이 같아지도록 형 변환한 후에 연산을 수행

    • 원칙적으로는 정수끼리 실수끼리의 연산만 가능하지만, 정수와 실수의 연산이 잦은 관계로 오류 발생없이 실행되도록 규칙을 추가.
    • 정수를 실수로 변경(실수 → 정수는 값 손실 발생)
      • 정수와 동일한 실수를 임시 메모리 공간에 생성 후 연산 수행 ( 정수값 변경x, 부가적 실수 데이터 생성)
    • 피연산자 중 하나가 double형이면 나머지를 double형으로 변형
    • float정수형을 연산하면 정수형float로 형 변환
    • charshort는 연산시 int로 형 변환
      • short변수의 값을 꺼내서 임시 공간 (4byte int타입)에 저장시킴

2. 명시적인 형 변환(강제 형 변환)

  • 수식앞에 ()안에 데이터형을 써줌
  • 형변환이 언제 되느냐에 따라서 연산의 결과가 달라진다.
  • 형변환 연산자는 단항 연산자이므로 다른 이항 연산자보다 우선순위가 높아서 연산의 결과를 형 변환하려면 변환할 연산식 전체를 ()로 감싸 주어야함.

🍑연산자의 우선순위와 결합 규칙

연산자의 우선순위

: 우선순위에 의해서 연산자의 수행결과가 결정

  • 단항연산자 > 산술연산자 > 관계연산자 > 논리연산자 > 대입연산자 > 콤마연산자

  • 연산자의 우선순위가 같을때는 결합 방향 순서대로 연산을 수행

  • 우선순위가 혼동될때는 () 사용하는 것이 좋음

  • 우선순위가 같지 않은 연산자끼리 연산을 할 때는 ()를 사용하지 않아도 괜찮음

연산자의 결합규칙

: 같은 우선순위의 연산자에 대해서 어느 방향으로 연산을 수행할지를 결정

  • 대부분의 연산자는 → 방향으로 결합되지만, 예외적으로 단항연산자와 대입연산자는 <- 방향으로 결합.
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글