연산자를 사용하여 변수와 상수를 조작할 수 있습니다.
대입 연산자 (=
)
대입 연산자는 변수에 값을 지정합니다.
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;
}
위 프로그램은 화면에 a
와 b
의 최종 값을 출력합니다.
y = 2 + (x = 5);
이 식에서 y
는 2
와 다른 대입 식의 값(5
)를 더한 결과가 할당됩니다. 다음과 같은 식입니다.
x = 5;
y = 2 + x;
이것은 7
을 y
에 할당한 것과 같습니다.
다음 표현식은 C++에서 유효합니다.
x = y = z = 5;
x
, y
, z
세 변수에 모두 5
를 할당합니다.
산술 연산자 ( +
, -
, *
, /
, %
)
C++에서 지원하는 다섯 가지 산술 연산은 다음과 같습니다.
operator | description |
---|---|
+ |
addition |
- |
subtraction |
* |
multiplication |
/ |
division |
% |
modulo |
덧셈, 뺄셈, 곱셈 및 나눗셈은 문자 그대로 해당 수학 연산자에 해당합니다.
백분율 기호(%
)로 표시되는 나머지 연산자는 두 값의 나눗셈의 나머지를 제공합니다.
예를 들면 다음과 같습니다.
x = 11 % 3;
11
을 3
으로 나누면 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 = 3
및 c = 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)
에서 먼저 값 2
를 b
에 할당 한 다음 그 값을 a
와 비교하여 true
를 얻게 됩니다.
논리 연산자 (!
, &&
, ||
)
연산자 !
은 Boolean 연산 중 NOT에 대한 C++ 연산자입니다. 오른쪽에 피연산자가 true
이면 false
로 만들고, 피연산자가 false
이면 true
를 만듭니다. 기본적으로 피연산자의 반대 Boolean 값을 반환합니다. 예를 들면 다음과 같습니다.
!(5 == 5) // false
!(6 <= 4) // true
!true // false
!false // true
연산자 &&
는 Boolean 논리 연산 AND에 해당하며 두 피연산자가 모두 true
면 true
를, 그렇지 않으면 false
를 반환합니다.
&& OPERATOR (and) | ||
---|---|---|
a | b | a && b |
true | true | true |
true | false | false |
false | true | false |
false | false | false |
연산자 ||
는 Boolean 논리 연산 OR에 해당하며, 피연산자 중 하나가 ture
면 ture
를 반환하므로 두 피연산자가 모두 false
인 경우에만 false
입니다.
|| OPERATOR (or) | ||
---|---|---|
a | b | a || b |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
( (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';
}
위의 예에서 a
는 2
이고 b
는 7
이므로 표현식 (a>b)
는 true
가 아니기 때문에 b
를 반환하게 됩니다.
쉼표 연산자 (,
)
쉼표 연산자는 각각의 피연산자를 왼쪽에서 오른쪽 순서로 평가하고, 마지막 연산자의 값을 반환합니다.
a = (b=3, b+2);
위의 예시에서 먼저 값 3
을 b
에 할당한 다음 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);
여기서 char
은 1
바이트 크기의 자료형이므로 x
에는 1
이 할당됩니다.
sizeof
가 반환 한 값은 Compile-Time 상수이므로 항상 프로그램 실행 전에 결정되게 됩니다.