728x90
1.1.5 연산자
변수는 이름이 뜻하는 바와 같이 변경하면서 사용할 수 있어야 한다.
연산자는 C++에서 변수값을 변경할 때 사용할 수 있는 항목을 이야기한다.
C++의 연산자는
- 이항 연산자(binary operator)[두 개의 변수를 대상으로 하는 연산자]
- 단항 연산자(unary operator)[하나의 변수를 대상으로 하는 연산자]
- 삼항 연산자(ternary operator)[세 개의 변수를 대상으로 하는 연산자]
가 있다.
C++에서는 삼항 연산자는 단 한개밖에 없다.
연산자 | 설명 | 사용 예 |
= | 오른쪽에 있는 값을 왼쪽에 있는 변수에 대입하는 이항 연산자. | int i; i = 3; int j; j = i; |
! | true/false 논리값을 반전시키는 단항 연산자. | bool b = !true; bool b2 = !b; |
+ | 덧셈을 위한 이항 연산자 | int i = 3 + 2; int j = i + 5; int k = i + j; |
- * / |
뺄셈 곱셈 나눗셈을 위한 이항 연산자 | int i = 5 - 1; int j = 5 * 2; int k = j / i; |
% | 정수 나눗셈에서의 나머지값을 구하는 이항 연산자, 나머지 도는 모듈(modulo) 연산자 라고도 한다. |
int remainder = 5 % 2; |
++ | 변숫값을 1 증가시키는 단항 연산자, 연산자가 변수 오른쪽에 있으면 '사후 증가 ' 가 적용되어 해당 코드 라인에서는 증가 하기 전의 값을 가지나 그 라인을 벗어나면 1 증가한다. 연산자가 변수 왼쪽에 있으면 '사전 증가' 가 적용되어 해당 코드라인에서 1 증가한 값을 가진다. |
i++; ++i; |
-- | 변숫값을 1 감소시키는 단항 연산자, ++와 마찬가지로 연산자 위치에 따라 '사후 감소' 또는 '사전 감소' 가 적용된다. |
i--; --i; |
+= | i = i + j의 축악형. | i += j; |
-= *= /= %= |
i = i - j; i = i * j; i = i / j; i = i% j; 의 축약형 |
i -= j; i *= j; i /= j; i %= j; |
& &= |
두 변수의 각 비트값에 AND 연산을 한다. | i = j & k; i &= k; |
| |= |
두 변수의 각 비트값에 OR 연산을 한다. | i = j | k; j |= k; |
<< >> <<= >>= |
왼쪽 변수의 비트열을 오른쪽 값만큼 왼쪽(<<) 또는 오른쪽(>>) 으로 시프트 연산 한다. 비트단위의 지정위치만큼 이동하는것 이기에, 1비트가 왼쪽으로 미루어지면, 2배수 하는것과 같다. 오른쪽으로 미루면 2배 작아지는것 과 같다. |
i = i << 1; i = i >> 4; i <<= 1; i >>= 4; |
^ ^= |
두 변수의 각 비트값에 배타적XOR(exclusive or)[배타적 논리합] 연산을 한다. 각 항목의 비트끼리 서로 결과가 다른경우에만 좌항에 1, 같을경우 0을 기입한다. 만약, i와 j의 사이즈가 다르다면, 기입되는 i기준으로 정해진다. i가 더 길다면, 남은부분은 유지되고, i가 더 짧다면 버려지게 된다. |
i = i ^ j; i ^= j; |
? : | 왼쪽과 오른쪽항에 따라 값을 도출하게 하는 삼항 연산자. 만약 ~면 ~하고 아니면 ~한다. 라는걸 축약적으로 표현하는 문법이다. |
i > j ? "true" : "no"; |
in t somelnteger = 256 ;
short someShort;
long someLong;
flo a t someFloat;
double someDouble;
somelnteger-H-;
somelnteger *= 2 ;
someShort = s ta tic _ cast<sho rt> (somelnteger) ;
someLong = someShort * 10000;
someFloat = someLong + 0 .7 8 5f ;
someDouble = s ta tic _ cast<double> (someFloat) / 100000;
cout « someDouble « en dl;
C++ 컴파일러는 연산자를 처리할 때 미리 정해진 순서를 따른다. 다양한 연산자를 사용한 코드의 연산순서는 이해하기 복잡하고 가독성이 떨어질 수 있음으로, 연산식을 이해하기 쉬운 조각으로 분해하거나 괄호를 이용하여 명시적 순서를 표기하는 편이 좋다.
in t i = 34 + 8 * 2 + 21 / 7 % 2 ;
in t i = 34 + (8 * 2 ) + ( (21 / 7 ) % 2 )
위 코드 두줄은 같은 결과를 반환하지만, 무엇이 더 가독성이 높은지는 말하지 않아도 알 수 있을것이다.
C++에서는 / * %연산을 먼저 연산하고 (왼쪽에서 오른쪽으로), 그다음 덧셈, 뺄셈, 그리고 비트연산을 수행한다.
괄호를 이용하면 컴파일러에 어떤 연산을 먼저 해야하는지 명시적으로 지정하여 먼저 수행하게 해준다.
728x90
'전문가를 위한 C++정리' 카테고리의 다른 글
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.7 조건문 (0) | 2024.01.05 |
---|---|
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.6 데이터 타입 (0) | 2024.01.04 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.4 리터럴 (0) | 2024.01.04 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.3 변수 (0) | 2024.01.03 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.2 네임 스페이스 (0) | 2024.01.03 |