C++ 연산자


연산자는 컴파일러에게 특정 수학적 또는 논리적 연산을 수행하도록 지시하는 기호입니다. C++에는 풍부한 내장 연산자가 있으며 다음 유형의 연산자를 제공합니다.

  • 산술 연산자

  • 관계 연산자

  • 논리 연산자

  • 비트 연산자

  • 할당 연산자

  • 기타 연산자

이 장에서는 산술 연산자, 관계 연산자, 논리 연산자, 비트 연산자, 할당 연산자 및 기타 연산자를 하나씩 소개합니다.

산술 연산자

다음 표는 C++에서 지원하는 산술 연산자를 보여줍니다.

변수 A의 값이 10이고 변수 B의 값이 20이라고 가정하면 다음과 같습니다.

을 얻습니다.
OperatorDescriptionExample
+두 피연산자를 추가하면A + B가 됩니다. 30
- 첫 번째 피연산자에서 두 번째 피연산자 를 뺍니다. A * B는 200
/분모로 분자를 나누면B / A는 2
%모듈로 연산자, 나눗셈 후 나머지B % A는 0
++증분 연산자, 정수 값을 1A++로 11
을 얻습니다.--감소 연산자, 정수 값을 1A만큼 줄이면 9
이 됩니다.

예제

C++에서 사용할 수 있는 산술 연산자를 이해하려면 아래 예를 살펴보세요.

다음 C++ 프로그램을 test.cpp 파일에 복사하여 붙여넣고 프로그램을 컴파일하고 실행하세요.

#include <iostream>
using namespace std;
 
main()
{
   int a = 21;
   int b = 10;
   int c ;
 
   c = a + b;
   cout << "Line 1 - c 的值是 " << c << endl ;
   c = a - b;
   cout << "Line 2 - c 的值是 " << c << endl ;
   c = a * b;
   cout << "Line 3 - c 的值是 " << c << endl ;
   c = a / b;
   cout << "Line 4 - c 的值是 " << c << endl ;
   c = a % b;
   cout << "Line 5 - c 的值是 " << c << endl ;
   c = a++; 
   cout << "Line 6 - c 的值是 " << c << endl ;
   c = a--; 
   cout << "Line 7 - c 的值是 " << c << endl ;
   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 21
Line 7 - c 的值是 22

관계 연산자

다음 표는 C++에서 지원하는 관계 연산자를 보여줍니다.

변수 A의 값이 10이고 변수 B의 값이 20이라고 가정하면,

OperatorDescriptionInstance
==둘의 값이 맞는지 확인하세요 피연산자가 같음, 같으면 조건은 참입니다. (A == B)는 사실이 아닙니다.
!= 두 피연산자의 값이 같은지 확인하고, 그렇지 않으면 조건이 true인지 확인합니다. (A != B)는 사실입니다.
> 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인하고, 그렇다면 조건이 true입니다. (A>B)는 사실이 아닙니다.
< 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은지 확인하고, 그렇다면 조건은 true입니다. (A < B)는 참입니다.
>= 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 확인하고, 그렇다면 조건이 true입니다. (A >= B)는 사실이 아닙니다.
<=왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 확인하고, 그렇다면 조건이 true입니다. (A <= B)는 참입니다.

예제

C++에서 사용할 수 있는 관계 연산자를 이해하려면 아래 예를 살펴보세요.

다음 C++ 프로그램을 test.cpp 파일에 복사하여 붙여넣고 프로그램을 컴파일하고 실행하세요.

#include <iostream>
using namespace std;

main()
{
   int a = 21;
   int b = 10;
   int c ;

   if( a == b )
   {
      cout << "Line 1 - a 等于 b" << endl ;
   }
   else
   {
      cout << "Line 1 - a 不等于 b" << endl ;
   }
   if ( a < b )
   {
      cout << "Line 2 - a 小于 b" << endl ;
   }
   else
   {
      cout << "Line 2 - a 不小于 b" << endl ;
   }
   if ( a > b )
   {
      cout << "Line 3 - a 大于 b" << endl ;
   }
   else
   {
      cout << "Line 3 - a 不大于 b" << endl ;
   }
   /* 改变 a 和 b 的值 */
   a = 5;
   b = 20;
   if ( a <= b )
   {
      cout << "Line 4 - a 小于或等于 b" << endl ;
   }
   if ( b >= a )
   {
      cout << "Line 5 - b 大于或等于 a" << endl ;
   }
   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a

논리 연산자

다음 표는 C++에서 지원하는 관계형 논리 연산자를 보여줍니다.

변수 A의 값이 1이고 변수 B의 값이 0이라고 가정하면,

OperatorDescriptionInstance
&&을 논리 AND 연산자라고 합니다. 두 피연산자가 모두 0이 아니면 조건은 참입니다. (A && B)는 거짓입니다.
||을 논리 OR 연산자라고 합니다. 두 피연산자 중 하나라도 0이 아니면 조건은 참입니다. (A || B)는 사실입니다.
!을 논리 NOT 연산자라고 합니다. 피연산자의 논리적 상태를 반전시키는 데 사용됩니다. 논리 NOT 연산자는 조건이 참인 경우 거짓으로 만듭니다. !(A && B)는 사실입니다.

예제

C++에서 사용할 수 있는 논리 연산자를 이해하려면 아래 예를 살펴보세요.

다음 C++ 프로그램을 test.cpp 파일에 복사하여 붙여넣고 프로그램을 컴파일하고 실행하세요.

#include <iostream>
using namespace std;

main()
{
   int a = 5;
   int b = 20;
   int c ;

   if ( a && b )
   {
      cout << "Line 1 - 条件为真"<< endl ;
   }
   if ( a || b )
   {
      cout << "Line 2 - 条件为真"<< endl ;
   }
   /* 改变 a 和 b 的值 */
   a = 0;
   b = 10;
   if ( a && b )
   {
      cout << "Line 3 - 条件为真"<< endl ;
   }
   else
   {
      cout << "Line 4 - 条件不为真"<< endl ;
   }
   if ( !(a && b) )
   {
      cout << "Line 5 - 条件为真"<< endl ;
   }
   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真

Bitwise Operators

Bitwise 연산자는 비트에 대해 작동하고 비트 단위로 작업을 수행합니다. &, | 및 ^의 실제 값은 다음과 같습니다.

0011 A = 60, B = 13이고 이제 이진 형식으로 표현하면 다음과 같다고 가정합니다.
pqp & qp ^ q
00 00
1011
1110
00 11

A = 0011 1100

B = 0000 1101

---- -------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

다음 표는 C++를 보여줍니다. 비트 연산자를 지원합니다. 변수 A의 값이 60이고 변수 B의 값이 13이라고 가정하면 다음과 같습니다.

Operator&|^~<<>

예제

C++에서 사용할 수 있는 비트 연산자를 이해하려면 아래 예를 살펴보세요.

다음 C++ 프로그램을 test.cpp 파일에 복사하여 붙여넣고 프로그램을 컴파일하고 실행하세요.

#include <iostream>
using namespace std;

main()
{
   unsigned int a = 60;	  // 60 = 0011 1100  
   unsigned int b = 13;	  // 13 = 0000 1101
   int c = 0;           

   c = a & b;             // 12 = 0000 1100
   cout << "Line 1 - c 的值是 " << c << endl ;

   c = a | b;             // 61 = 0011 1101
   cout << "Line 2 - c 的值是 " << c << endl ;

   c = a ^ b;             // 49 = 0011 0001
   cout << "Line 3 - c 的值是 " << c << endl ;

   c = ~a;                // -61 = 1100 0011
   cout << "Line 4 - c 的值是 " << c << endl ;

   c = a << 2;            // 240 = 1111 0000
   cout << "Line 5 - c 的值是 " << c << endl ;

   c = a >> 2;            // 15 = 0000 1111
   cout << "Line 6 - c 的值是 " << c << endl ;

   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

할당 연산자

다음 표에는 C++에서 지원하는 할당 연산자가 나열되어 있습니다.

DescriptionInstance
두 피연산자에 동시에 존재하는 경우 이진 AND 연산 문자가 결과에 복사됩니다. (A & B)는 12, 즉 0000 1100을 제공합니다.
두 피연산자 중 하나에 있는 경우 이진 OR 연산자는 결과에 1비트를 복사합니다. (A | B)는 0011 1101인 61을 얻습니다.
피연산자 중 하나에만 있고 둘 다에는 없으면 이진 XOR 연산자는 결과가 진행 중입니다. (A ^ B)는 49, 즉 0011 0001
2의 보수 연산자는 비트를 "뒤집는" 효과가 있는 단항 연산자입니다. (~A )는 -61, 즉 1100 0011, 2의 보수, 부호 있는 이진수를 제공합니다.
이진 왼쪽 시프트 연산자. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동합니다. A << 2는 240을 얻으며 이는 1111 0000
이진 오른쪽 시프트 연산자입니다. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동합니다. A >> 2는 15를 얻게 되며 이는 0000 1111
에 할당합니다. 와 같습니다.
OperatorDescription Example
=간단한 할당 연산자, 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당C = A + B는 A + B의 값을 C
+=덧셈 및 할당 연산자, 왼쪽 피연산자에 오른쪽 피연산자를 더한 결과를 왼쪽 피연산자에 대입 C += A 는 C = C + A
-= 빼기 대입 연산자, 오른쪽 빼기 결과를 대입 왼쪽 피연산자에서 왼쪽 피연산자로 C -= A, 이는 C = C - A
*=와 동일합니다. 곱셈 및 할당 연산자, 오른쪽 피연산자를 왼쪽으로 곱합니다. 피연산자의 결과 왼쪽 피연산자 C *= A에 할당됩니다. 이는 C = C * A
/=과 같습니다. 나누기 및 할당 연산자는 왼쪽 피연산자를 오른쪽 피연산자로 나눈 결과를 왼쪽에 할당합니다. 피연산자 C /= A는 C = C / A와 동일합니다
%= 모듈러스와 할당 연산자를 찾아 두 피연산자의 모듈러스를 찾아 왼쪽 피연산자에 할당합니다 C %= A 이는 C = C % A
<<=왼쪽 시프트 및 할당 연산자와 동일합니다.C <<= 2는 C = C << 2
> ;>= 오른쪽 시프트 및 할당 연산자C >>= 2는 C = C >> 2
&=비트 AND 및 할당 연산자C &= 2와 같습니다. C = C & 2
^=비트 배타적 OR 및 할당 연산자C ^= 2는 C = C ^ 2
|=비트 OR 및 할당 연산자C |= 2는 C = C 2
과 같습니다.

예제

C++에서 사용할 수 있는 할당 연산자에 대해 알아보려면 아래 예를 살펴보세요.

다음 C++ 프로그램을 test.cpp 파일에 복사하여 붙여넣고 프로그램을 컴파일하고 실행하세요.

#include <iostream>
using namespace std;

main()
{
   int a = 21;
   int c ;

   c =  a;
   cout << "Line 1 - =  运算符实例,c 的值 = : " <<c<< endl ;

   c +=  a;
   cout << "Line 2 - += 运算符实例,c 的值 = : " <<c<< endl ;

   c -=  a;
   cout << "Line 3 - -= 运算符实例,c 的值 = : " <<c<< endl ;

   c *=  a;
   cout << "Line 4 - *= 运算符实例,c 的值 = : " <<c<< endl ;

   c /=  a;
   cout << "Line 5 - /= 运算符实例,c 的值 = : " <<c<< endl ;

   c  = 200;
   c %=  a;
   cout << "Line 6 - %= 运算符实例,c 的值 = : " <<c<< endl ;

   c <<=  2;
   cout << "Line 7 - <<= 运算符实例,c 的值 = : " <<c<< endl ;

   c >>=  2;
   cout << "Line 8 - >>= 运算符实例,c 的值 = : " <<c<< endl ;

   c &=  2;
   cout << "Line 9 - &= 运算符实例,c 的值 = : " <<c<< endl ;

   c ^=  2;
   cout << "Line 10 - ^= 运算符实例,c 的值 = : " <<c<< endl ;

   c |=  2;
   cout << "Line 11 - |= 运算符实例,c 的值 = : " <<c<< endl ;

   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - =  运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2

기타 연산자

다음 표에는 C++에서 지원하는 다른 중요한 연산자가 나열되어 있습니다.

OperatorDescription
sizeofsizeof 연산자는 변수의 크기를 반환합니다. 예를 들어, sizeof(a)는 4를 반환합니다. 여기서 a는 정수입니다.
조건 ? X : Y조건 연산자. 조건이 true이면 값은 X이고, 그렇지 않으면 값은 Y입니다.
,쉼표 연산자는 일련의 연산을 순차적으로 수행합니다. 전체 쉼표 표현식의 값은 쉼표로 구분된 목록의 마지막 표현식 값입니다.
.(점) 및 ->(화살표) 멤버 연산자는 클래스, 구조체 및 공용체의 멤버를 참조하는 데 사용됩니다.
Cast형변환 연산자는 한 데이터 유형을 다른 데이터 유형으로 변환합니다. 예를 들어 int(2.2000)은 2를 반환합니다.
&포인터 연산자 &는 변수의 주소를 반환합니다. 예를 들어 &a;는 변수의 실제 주소를 제공합니다.
*포인터 연산자 *는 변수를 가리킵니다. 예를 들어 *var는 변수 var를 가리킵니다.

C++의 연산자 우선순위

연산자의 우선순위에 따라 표현식의 용어 조합이 결정됩니다. 이는 표현식이 평가되는 방식에 영향을 미칩니다. 일부 연산자는 다른 연산자보다 우선순위가 높습니다. 예를 들어 곱셈 및 나눗셈 연산자는 덧셈 및 뺄셈 연산자보다 우선순위가 높습니다.

예를 들어 x = 7 + 3 * 2, 여기서 x에는 20 대신 13이라는 값이 할당됩니다. 왜냐하면 * 연산자가 +보다 우선순위가 높기 때문에 곱셈 3*2가 먼저 계산된 다음 7이 더해지기 때문입니다. .

다음 표에는 연산자 우선 순위가 높은 순서대로 나열되어 있습니다. 우선 순위가 높은 연산자는 표 위에 표시되고 우선 순위가 낮은 연산자는 표 아래에 표시됩니다. 표현식에서는 우선순위가 높은 연산자가 먼저 평가됩니다.

오른쪽에서 왼쪽으로 왼쪽에서 오른쪽으로 왼쪽에서 오른쪽 왼쪽에서 오른쪽으로 관계 <= >= 왼쪽에서 오른쪽으로 잠깐만요 == != 왼쪽에서 오른쪽으로 비트 AND AND & 왼쪽에서 오른쪽으로 비트 XOR XOR ^ 왼쪽에서 오른쪽으로 비트와이즈 OR | 왼쪽에서 오른쪽으로 논리 AND AND && 왼쪽에서 오른쪽으로 논리 OR OR || 왼쪽에서 오른쪽으로 조건? : 오른쪽에서 왼쪽으로 할당 = += -= *= /= %=>>= <<= &= ^= |= 오른쪽에서 왼쪽으로 쉼표 , 왼쪽에서 오른쪽으로 다음 C++ 프로그램을 test.cpp 파일에 복사하여 붙여넣고 프로그램을 컴파일하고 실행하세요.
카테고리 연산자 연관성
접미사 () [] -> 일달러 + - ! + - - (유형)* & sizeof
곱셈과 나눗셈 * / %
덧셈과 뺄셈 + -
Shift << >>
C++에서 연산자의 우선순위를 이해하려면 다음 예를 살펴보세요.
괄호가 있는 것과 없는 것의 차이를 비교하면 다른 결과가 나옵니다. (), /, * 및 +의 우선순위가 다르기 때문에 우선순위가 높은 연산자가 먼저 평가됩니다.

#include <iostream>
using namespace std;
 
main()
{
   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;
 
   e = (a + b) * c / d;      // ( 30 * 15 ) / 5
   cout << "(a + b) * c / d 的值是 " << e << endl ;

   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   cout << "((a + b) * c) / d 的值是 " << e << endl ;

   e = (a + b) * (c / d);   // (30) * (15/5)
   cout << "(a + b) * (c / d) 的值是 " << e << endl ;

   e = a + (b * c) / d;     //  20 + (150/5)
   cout << "a + (b * c) / d 的值是 " << e << endl ;
  
   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50