-
2024.02.20 - 연산자C++ 2024. 2. 20. 18:49
여러가지 연산자
연산자는 코드에서 여러가지 기능을 한다. 다양한 연산자들에 대해 정리해보자.
- 대입연산자 (=)
: 데이터를 저장하는 연산자. 오른쪽에 있는 값을 왼쪽에 있는 피연산자에 대입하는 연산을 수행한다.
ex) int a = 10; //a(피연산자)에 10(값)을 대입.
- 산술연산자 (+, -, *, /, %)
: 사칙연산을 다루는 연산자.
연산자 설명 + 왼쪽 피연산자에 오른쪽 피연산자를 더한 값을 반환. - 왼쪽 피연산자에 오른쪽 피연산자를 뺀 값을 반환. * 왼쪽 피연산자를 오른쪽 피연산자로 곱한 값을 반환. / 왼쪽 피연산자를 오른쪽 피연산자로 나눈 값을 반환. % 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 나머지를 반환. *tip
- 컴퓨터는 곱셈이 나눗셈 보다 빠르다. 나누기 2를 하기보다 곱하기 0.5를 하는 것이 좋다.
- 관계연산자/비교연산자(>, <, >=, <=, ==, !=)
: 피연산자들을 비교하여 참(true)/거짓(false)의 결과를 반환하는 연산자.
연산자 사용 예 설명 > a > b a 가 b 보다 크다면 1(true)을 반환. 그렇지 않으면 0(false)를 반환. < a < b a 가 b 보다 작다면 1(true)을 반환. 그렇지 않으면 0(false)를 반환. >= a >= b a 가 b 보다 크거나 같다면 1(true)을 반환. 그렇지 않으면 0(false)를 반환. <= a <= b a 가 b 보다 작거나 같다면 1(true)을 반환. 그렇지 않으면 0(false)를 반환. == a == b a 와 b가 같은 값이라면 1(true)을 반환. 그렇지 않으면 0(false)를 반환. != a != b a 와 b가 다른 값이라면 1(true)을 반환. 그렇지 않으면 0(false)를 반환. - 증감연산자(++, --)
: 피연산자의 값을 1증가 또는 1감소 시키는 연산자.
연산자 설명 ++a 변수 a의 값을 1증가 시킨 후, 연산을 진행한다. (전위연산) a++ 변수 a를 연산한 후, 값을 1증가 시킨다. (후위연산) --a 변수 a의 값을 1감소 시킨 후, 연산을 진행한다. (전위연산) a-- 변수 a를 연산한 후, 값을 1감소 시킨다. (후위연산) - 전위연산과 후위연산의 차이 실감하기
num1의 경우 전위연산을 하였기에 num1의 값이 먼저 1증가한 뒤에 출력이 되었다.
num2의 경우 후위연산을 하였기에 출력이 먼저 된 후에 값이 1증가하였다.
증감연산자를 잘 이용하면 코드를 줄이고, 연산도 줄일 수 있다.
ex) num = num + 1; --------> num1++;
//num = num + 1; 코드는 연산자가 =, + 두개인 반면 num1++; 코드는 연산자가 ++ 하나이다.
- 복합대입연산자(+=, -=, *=, /=, %=, ...)
: 산술연산자와 대입연산자를 한번에 나타낼 수 있다. 코드를 축약해준다.
사용 예 의미 a+=b; a = a + b; a-=b; a = a - b; a*=b; a = a * b; a/=b; a = a / b; a%=b; a = a % b; - 논리연산자(&&, ||, !)
: 주어진 논리식을 파악하여 참(true)/거짓(false)을 결정하여 반환한다.
- && (and 연산): 피연산자가 모두 참(true)이면 참을 반환한다.
논리식 결과 0 && 0 0 0 && 1 0 1 && 0 0 1 && 1 1 - || (or 연산): 피연산자 둘 중 하나라도 참(true)이면 참을 반환한다.
논리식 결과 0 || 0 0 0 || 1 1 1 || 0 1 1 || 1 1 - ! (부정): 피연산자가 참(true)이면 거짓(false), 거짓이면 참을 반환한다.
논리식 결과 !0 1 !1 0 예시
num1 == 9 가 false 이기 때문에 &&연산자를 쓴 res1의 값도 0(false)가 되었다.
num1 <= 10 이 ture 이기 때문에 ||연산자를 쓴 res2의 값은 1(true)가 되었다.
res3이 0(false)이 아니기 때문에 !res3의 값은 0(false)가 되었다.
*tip
- 프로그램에서 0 이외의 숫자는 모두 참(true)으로 간주한다.
- 비트연산자(&, |, ^,~)
: 비트단위의 계산을 할 때 사용하는 연산자이다.
- & : 두개의 비트가 모두 1일때 1을 반환한다.
연산 예 결과 0 & 0 0 0 & 1 0 1 & 0 0 1 & 1 1 - | : 두개의 비트중 하나라도 1이면 1을 반환한다.
연산 예 결과 0 | 0 0 0 | 1 1 1 | 0 1 1 | 1 1 - ^ (xor) : 두개의 비트가 서로 다른 경우에만 1을 반환한다.
연산 예 결과 0 ^ 0 0 0 ^ 1 1 1 ^ 0 1 1 ^ 1 0 - ~ : 비트가 1이면 0으로, 0이면 1로 반전시킨다.
연산 예 결과 ~0 1 ~1 0 예시
다 이해가가지만, ~num2의 값이 왜 -16일까?
이를 이해하기 위해서는 2진수의 음수 표현법을 알아야한다. 따로 다루겠다.
- shift연산자(<<, >>)
: 비트를 왼쪽 또는 오른쪽으로 이동시켜주는 연산자.
연산자 설명 << 지정한 수만큼 비트를 왼쪽으로 이동시킨다. >> 부호를 유지하면서 지정한 수만큼 비트를 오른쪽으로 이동시킨다. 예시
비트를 한칸 밀때마다 정수의 값이 2 곱하기/나누기 된다는 사실을 알 수 있다.
상황에 따라서 곱셈이나 나눗셈을 비트이동으로 대체할 수 있다.
- 삼항연산자
: 피연산자를 3개나 가지는 특별한 연산자.
"조건식 ? 반환값1 : 반환값2" 의 문법으로 작성된다. 조건식이 참이면 반환값1을, 거짓이면 반환값2를 반환한다.
예시
num1 > num2 가 거짓이기 때문에 반환값2인 num2가 res1에 반환되었다.
조건식이 참이기 때문에 반환값1인 num1이 res2에 반환되었다.
삼항연산자를 이용하면 단순한 조건식을 if문을 쓰지 않고 코드를 줄일 수 있다.
'C++' 카테고리의 다른 글
2024.02.21 - switch, case (0) 2024.02.21 2024.02.21 - region, if (0) 2024.02.21 2024.02.21 - 과제 중 문제 해결 (0) 2024.02.21 2024.02.20 - using namespace std, 변수 표기법, 자료형의 크기, 입력받기(cin) (0) 2024.02.20 2024.02.19 - Hello World, 변수 (0) 2024.02.19