[C++] 연산자

2019-09-07 08:03:15 +0000 -
C Plus Plus

연산자를 사용하여 변수와 상수를 조작할 수 있습니다.

대입 연산자 (=)

대입 연산자는 변수에 값을 지정합니다.

x = 5;

위의 코드는 정숫값 5를 변수 x에 지정합니다. 할당 작업은 항상 오른쪽에서 왼쪽으로 이루어집니다.

x = y;

이 코드는 변수 x에 변수 y의 값을 할당합니다. 이 코드가 실행되는 시점의 x값은 손실되고 y값으로 대체됩니다.
y가 나중에 변경되더라도 x가 받는 새로운 값에는 영향을 미치지 않습니다.

예를 들어 다음 코드를 살펴보겠습니다.

// 대입 연산자
#include <iostream>
using namespace std;

int main ()
{
  int a, b;         // a:?,  b:?
  a = 10;           // a:10, b:?
  b = 4;            // a:10, b:4
  a = b;            // a:4,  b:4
  b = 7;            // a:4,  b:7

  cout << "a:";
  cout << a;
  cout << " b:";
  cout << b;
}

위 프로그램은 화면에 ab의 최종 값을 출력합니다.

y = 2 + (x = 5);

이 식에서 y2와 다른 대입 식의 값(5)를 더한 결과가 할당됩니다. 다음과 같은 식입니다.

x = 5;
y = 2 + x;

이것은 7y에 할당한 것과 같습니다.

다음 표현식은 C++에서 유효합니다.

x = y = z = 5;

x, y, z 세 변수에 모두 5를 할당합니다.

산술 연산자 ( +, -, *, /, % )

C++에서 지원하는 다섯 가지 산술 연산은 다음과 같습니다.

operator description
+ addition
- subtraction
* multiplication
/ division
% modulo

덧셈, 뺄셈, 곱셈 및 나눗셈은 문자 그대로 해당 수학 연산자에 해당합니다.
백분율 기호(%)로 표시되는 나머지 연산자는 두 값의 나눗셈의 나머지를 제공합니다.
예를 들면 다음과 같습니다.

x = 11 % 3;

113으로 나누면 3이 되고, 나머지는 2이므로 변수 x는 값 2가 됩니다.

복합 대입 연산자 (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)

복합 대입 연산자는 변수에 대한 작업을 수행하여 변수의 현재 값을 수정합니다.

expression equivalent to…
y += x; y = y + x;
x -= 5; x = x - 5;
x /= y; x = x / y;
price *= units + 1; price = price * (units+1);

다른 모든 복합 할당 연산자에 대해서도 동일합니다.
예를 들면 다음과 같습니다.

// 복합 대입 연산자
#include <iostream>
using namespace std;

int main ()
{
  int a, b=3;
  a = b;
  a+=2;             // 'a=a+2'와 같습니다
  cout << a;
}

증가 연산자와 감소 연산자 (++, --)

증가 연산자(++)와 감소 연산자(--)는 변수에 저장된 값을 1씩 증가 또는 감소시키는 연산자 입니다. 각각 +=1-=1과 같습니다.

이 연산자의 특징은 접두사와 접미사로 모두 사용 될 수 있습니다. 즉, 변수 이름 앞에 (++x) 또는 뒤에 (x++) 쓸 수 있습니다.

x = 3;
y = ++x;
// x = 4, y = 4

위의 y에 지정된 값은 증가한 후 x의 값입니다.

x = 3;
y = x++;
// x = 4, y = 3

위의 y에 지정된 값은 증가하기 전의 x 값입니다.
x++는 할당 이후에 연산을 하게 되므로 바뀌기 전의 값이 y에 할당 되게 됩니다.

관계 및 비교 연산자 (==, !=, >, <, >=, <=)

관계연산자와 비교연산자를 사용하여 두 가지 식을 비교할 수 있습니다.
비교의 결과는 true 또는 false입니다. (Boolean 값)

C++의 관계 연산자는 다음과 같습니다.

operator description
== Equal to
!= Not equal to
< Less than
> Greater than
<= Less than or equal to
>= Greater than or equal to

몇 가지 예가 있습니다.

(7 == 5)     // false
(5 > 4)      // true
(3 != 2)     // true
(6 >= 6)     // true
(5 < 5)      // false

물론 숫자 상수만 비교할 수 있는 게 아닌, 변수를 포함하여 비교도 가능합니다. a = 2, b = 3c = 6이라고 가정하면 다음과 같습니다.

(a == 5)     // false, a는 5와 같지 않습니다.
(a*b >= c)   // true, (2*3 >= 6)는 참 입니다.
(b+4 > a*c)  // false, (3+4 > 2*6)는 거짓 입니다.
((b=2) == a) // true

대입 연산자(=)와 등호 비교연산자(==)를 주의해야 합니다! 대입 연산자(=)는 오른쪽에 있는 값을 왼쪽에 있는 변수에 할당하고, 등호 비교연산자(==)는 연산자의 양쪽에 있는 값이 같은지 비교합니다.
마지막 식 ((b=2) == a)에서 먼저 값 2b에 할당 한 다음 그 값을 a와 비교하여 true를 얻게 됩니다.

논리 연산자 (!, &&, ||)

연산자 !은 Boolean 연산 중 NOT에 대한 C++ 연산자입니다. 오른쪽에 피연산자가 true이면 false로 만들고, 피연산자가 false이면 true를 만듭니다. 기본적으로 피연산자의 반대 Boolean 값을 반환합니다. 예를 들면 다음과 같습니다.

!(5 == 5)   // false
!(6 <= 4)   // true
!true       // false
!false      // true

연산자 &&는 Boolean 논리 연산 AND에 해당하며 두 피연산자가 모두 truetrue를, 그렇지 않으면 false를 반환합니다.

&& OPERATOR (and)
aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse


연산자 ||는 Boolean 논리 연산 OR에 해당하며, 피연산자 중 하나가 tureture를 반환하므로 두 피연산자가 모두 false인 경우에만 false입니다.

|| OPERATOR (or)
aba || b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse
( (5 == 5) && (3 > 6) )  // false ( true && false )
( (5 == 5) || (3 > 6) )  // true ( true || false )

마지막 예제 ((5==5)||(3>6))에서 C++은 먼저 5 == 5가 참인지 평가하고, 그 이후에 3 > 6이 참인지 여부를 확인하지 않습니다. 이것을 단락 평가라고 하며 다음과 같이 작동합니다.

연산자 단락 평가
&& 왼쪽 표현식이 false이면 결합 된 결과는 false입니다. (오른쪽 표현식은 평가되지 않음)
|| 왼쪽 표현식이 true이면 결합 된 결과는 true입니다. (오른쪽 표현식은 평가되지 않음)

조건부 삼항 연산자 (?)

조건부 연산자는 표현식을 평가하여 해당 표현식이 true로 평가되면 하나의 값을 반환하고, 표현식이 false로 평가되면 다른 값을 반환합니다. 구문은 다음과 같습니다.

조건 ? 결과1 : 결과2

조건true이면, 결과1로 반환되고, 그렇지 않으면 결과2로 반환됩니다. 예를 들면 다음과 같습니다.

// 조건부 연산자
#include <iostream>
using namespace std;

int main ()
{
  int a,b,c;

  a=2;
  b=7;
  c = (a>b) ? a : b;

  cout << c << '\n';
}

위의 예에서 a2이고 b7이므로 표현식 (a>b)true가 아니기 때문에 b를 반환하게 됩니다.

쉼표 연산자 (,)

쉼표 연산자는 각각의 피연산자를 왼쪽에서 오른쪽 순서로 평가하고, 마지막 연산자의 값을 반환합니다.

a = (b=3, b+2);

위의 예시에서 먼저 값 3b에 할당한 다음 b + 2를 변수 a에 할당합니다. 따라서 변수 a에는 값 5가 할당되고 변수 b에는 값 3이 할당됩니다.

비트 연산자 (&, |, ^, ~, <<, >>)

비트 연산자는 저장된 값을 나타내는 비트 패턴을 고려하여 변수를 수정합니다.

operator asm equivalent description
& AND Bitwise AND
| OR Bitwise inclusive OR
^ XOR Bitwise exclusive OR
~ NOT Unary complement (bit inversion)
<< SHL Shift bits left
>> SHR Shift bits right

형변환 연산자

형변환 연산자를 사용하면 지정된 자료형의 값을 다른 자료형으로 변환할 수 있습니다. C++에서 이를 수행하는 몇 가지 방법이 있습니다. 가장 간단한 방법은 식 앞에 괄호 (())로 묶인 자료형으로 변환되도록 하는 것입니다.

int i;
float f = 3.14;
i = (int) f;

위의 코드는 부동 소수점 숫자 3.14를 정숫값(3)으로 변환합니다. 나머지는 사라집니다. 여기서 형변환 연산자는 (int)입니다. C++에서 동일한 작업을 수행하는 또 다른 방법은 식 앞에 함수식 표기법을 사용하여 형변환을 하는 방법입니다.

int i;
float f = 3.14;
i = int (f);

형변환을 하는 두 가지 방법 모두 C++에서 사용 가능합니다.

sizeof

sizeof 연산자는 해당 자료형 또는 객체의 크기를 바이트 단위로 반환합니다.

x = sizeof (char);

여기서 char1바이트 크기의 자료형이므로 x에는 1이 할당됩니다.

sizeof가 반환 한 값은 Compile-Time 상수이므로 항상 프로그램 실행 전에 결정되게 됩니다.