학습일지/C와 C++

C/C++ 연산자

Tsukino Ren 2026. 3. 4. 14:11

연산자

연산자Operator), 피연산자(Operand)

  피연산자와 함께 사용되어서 계산 결과를 만들어 내는 기호를 뜻한다

     예시 ) 17 + 11 이면 17과 11을 피연산자라 하고 + 를 연산자라고 한다.

Symbol 1Type of operationAssociativity

[ ] ( ) . ->
++ -- (postfix)
Expression Left to right
sizeof & * + - ~ !
++ -- (prefix)
Unary Right to left
typecasts Unary Right to left
* / % Multiplicative Left to right
+ - Additive Left to right
<< >> Bitwise shift Left to right
< > <= >= Relational Left to right
== != Equality Left to right
& Bitwise-AND Left to right
^ Bitwise-exclusive-OR Left to right
| Bitwise-inclusive-OR Left to right
&& Logical-AND Left to right
|| Logical-OR Left to right
? : Conditional-expression Right to left
= *= /= %=
+= -= <<= >>= &=
^= |=
Simple and compound assignment 2 Right to left
, Sequential evaluation Left to right

출처 : https://learn.microsoft.com/en-us/cpp/c-language/precedence-and-order-of-evaluation?view=msvc-170

 

Precedence and order of evaluation

Learn more about: Precedence and order of evaluation

learn.microsoft.com

정수 피연산자와 실수 피연산자

  같은 자료형 끼리의 나눗셈은 그 결과도 같은 자료형이다. C 언어에서는 float 자료형의 나머지 연산은 불가능 하다.

복합 대입 연산자

  예시 ) Num *= 11 로 =대입 앞에 + - * / % 등이 있으며 해당 기호들은 선 처리후 대입한다.

값(Value), 식(Expression), 문(Statement)

  값 은 리터럴과 같다

   예시) 13579 , 1.1456, "Hello, World!" 등

  식 은 피연산자와 연산자로 이루어져서 값으로 귀결 되는 것들이라 한다.

   예시 ) 13+579, 1.1456 - 0.87 등등

  문 은 컴퓨터가 수행할 명령어를 뜻한다

 

증감 연산자

  증가/감소의 줄임말로 단항의 피연산자를 가지는게 특징이다.

    예시 ) ++i 는 전치 증감 연산자로 지금 당장 i 를 1을 증가한다

              i++ 는 후치 증감 연산자로 다음 줄에 i 를 1을 증가한다

논리 연산자

 앞서 C언어는 거짓, 거짓에 준하는 값 0 , NULL, \0 등이 있고 그 외에 나머지는 참이라 한다.
  논리 곱 연산자(&&), 논리 합 연산자(||), 논리 반전 연산자(!)

  결국 합이고 곱이기에

예시 ) -1 && 0; 이면 -1은 참이라 1이고 0은 거짓이라 0이기에 곱하면 0이되어 거짓이된다

          -3 || 0; 은 -3은 참이고 0은 거짓이기에 1과 0이지만 합을 하기에 1이 되므로 참

곱은 둘다 참이여야만 참, 합은 둘중 하나라도 참이면 참이 나온다.

관계 연산자

피연산자 간의 관계를 판단하는 연산자로 < , != , == 등이 있다. 수학과 다르게 대등 연산자는 == 을 사용한다. =은 대입이다.

 

형변환 연산자 (Type-cast Operator)

자료형 A 에서 자료형 B로 변환 시켜주는 연산자로 명시적 형변환 이라고도 부른다.

예시 ) 3.14 를 (int) 3.14로 하여 정수 3으로 변환하거나 숫자 1을 (boolean)1로 하여 참(True)으로 변환시키거나 할때 사용한다.

- 추가로 찾아보니 실수에서 정수로 변환하게되면 소수점 절삭과 반올림의 부재로 인한 데이터의 유실과 표현 범위의 차이 및 값의 왜곡으로 문제가 생기며 부동 소수점 오차가 발생 그리고 성능(불필요한 연산) 및 가독성 저하가 된다고 합니다

 

삼항 연산자

피연산자로 세 개의 항을 갖는 연산자

예시 )

// Main.c

#include <stdio.h>

int main(void)
{
	int Num1 = 4;
	int Num2 = 5;

	
	printf("큰값 = %d", Num1 < Num2 ? Num2 : Num1);

	return 0;
}

sizeof

단항 피연산자를 가지며, 피연산자의 자료형 크기를 바이트 단위로 반환한다.

ex)

// Main.c

#include <stdio.h>

int main(void)
{
	float Num = 0.1;

	printf("%d\n", sizeof(Num));

	return 0;
}

 

비트 연산자

비트(Bit-wise)라는 말이 붙으면 피연산자를 모두 2진수로 평가한 후에 연산을 수행해야한다.

비트 논리 연산자 (Bit-wise Logical Operator)

비트별로 논리 연산을 수행하는 연산자로 알려주신 바로는 비트 논리보다 곱/합/반전/베타합 글자에 집중하라고 한다.

비트 논리 연산자의 종류

비트 논리 곱 연산자(&)

비트 논리 합 연산자(|)

비트 논리 반전 연산자 (~):전체 비트를 반전한다.

비트 논리 베타합 연산자(^):비트별로 1의 개수가 홀수개면 그 결과는 1, 짝수개면 0.

비트 이동 연산자 (Bit-Shift Operator)

피연산자를 2진수로 모두 평가 한후에 2진수 기준 왼쪽 혹은 오른쪽으로 n칸씩 이동시키는 연산자이다

<< n 은 왼쪽으로 n번 이동시키며 빈 자리는 0으로 채운다

>> n 은 오른쪽으로 이동시키며 부호 비트에 맞춰 빈 자리를 채운다.

예시 ) 0000 1100 << 2 면 0011 0000 이므로 48이 된다.
          0000 1100 >> 4 면 0000 이므로 0이다.

          1100 0000 >> 4 일경우 부호가 음수여서 1111 1100 (-4)이 된다.

          1100 0000 << 2 일경우 2의 보수와 비트 수의 크기에 따라 답이 달라진다고 합니다.

          8비트만 쓸경우: 0 , 일반적인 컴퓨터 (32/64): -256

[비트 연산 실전 문제] - AI에게 문제 출체 요구
1. AND (&) 연산
15 & 7의 결과값은 무엇일까요?
  • (힌트: 15는 1111, 7은 0111)
    위 같은경우 곱이기에 1111 * 0111 = 0111 이므로 7
2. OR (|) 연산
8 | 4의 결과값은 무엇일까요?
  • (힌트: 8은 1000, 4는 0100)
    합 이기에 1000 + 0100 = 1100 이므로 12
3. XOR (^) 연산
10 ^ 10의 결과값은 무엇일까요?
  • (힌트: 같은 숫자를 XOR 하면 어떤 결과가 나올까요?)
    1010 ^ 1010 둘다 같은 수이므로 0000되어 0이다.
    예시 ) 10^5 일 경우 1010 ^ 0101 이므로 1111 되니 15이다
4. NOT (~) 연산
부호 있는 8비트 정수 체계에서 ~0의 결과값은 무엇일까요? (10진수로 답하세요)
  • (힌트: 모든 비트가 반전됩니다.)
    0000 0000 을 반전하므로 1111 1111 이이고 1을빼고 반전시키면 0000 0001 이 되므로 -1을 의미한다고 한다.
    ~x =-(x+1) 
5. Shift (<<, >>) 연산
20 >> 2의 결과값은 무엇일까요?
  • (힌트: 오른쪽으로 한 칸 밀 때마다 값은 1/2이 됩니다.)
    10100을 왼쪽에서 오른쪽으로 땡겨온다 생각하면 00101이므로 5
    AI 계산식 : 20/2^2 = 20/4 = 5




 

'학습일지 > C와 C++' 카테고리의 다른 글

C/C++ 함수  (0) 2026.03.05
C/C++ 배열  (0) 2026.03.05
C/C++ 반복문  (0) 2026.03.04
C/C++ 조건문  (0) 2026.03.04
C/C++ 구조체 사용해보기  (0) 2026.03.03