프로그래밍 공부
작성일
2024. 1. 4. 14:30
작성자
WDmil
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