<연산자의 종류>
대입연산자, 산술연산자, sizeof연산자, 대소비교연산자, 논리연산자,
축약연산자, 비트단위연산자, 쉬프트연산자, 증감연산자
<대입연산자>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <iostream>
using namespace std;
void main() {
int a = 10;
int b = a;
float c = 3.14592f;
float d = 1 / 3.f; f를 써서 실수를 만들어 줌 (정수/실수=실수)
cout << d << endl; f를 안쓰면 소숫점이 짤려서 나옴
d = 0.333333
float e = 1 / 3;
cout << e << endl; e = 0 뒤에 소숫점 짤림 (정수/정수 = 정수)
float f = 1.1f / 3; f를 안써주면 double형이 된다.
cout << f << endl; f = 0.366667 (실수/ 정수 = 실수)
float g = 10 / 3; g = 3 뒤에 소수점 짤림 (정수/정수 = 정수)
cout << g << endl;
b = c; b = 3 b는 정수를 담는 int 형 변수이기 때문에
cout << b << endl; 뒤에 소숫점은 짤림
|
cs |
<산술연산자, sizeod 연산자> -sizeof는 함수처럼 생겼지만 연산자다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include <iostream>
using namespace std;
void main() {
cout << 10 + 10 << endl; -->20
cout << 10 - 10 << endl; -->0
cout << 10 * 10 << endl; -->100
cout << 10 / 10 << endl; -->1
cout << 10 % 10 << endl; -->0
cout << 123 % 100.12 << endl; --> 오류뜸. 정수만 가능
+ 나머지 연산의 경우 수의 범위를 지정한다거나
혹은 홀수 짝수를 나눌때 주로 사용한다.
cout << 10 / 0 << endl;
나머지 연산이든 나누기든 0나누기는 애초에 수학에서 정의되어 있지 않다
cout << sizeof(char) << endl; ->1
cout << sizeof(bool) << endl; ->1
cout << sizeof(short) << endl; ->2
cout << sizeof(int) << endl; ->4
cout << sizeof(long) << endl; ->4
cout << sizeof(float) << endl; ->4
cout << sizeof(double) << endl; ->8
cout << sizeof(long long ) << endl; ->8
cout << sizeof(long double ) << endl; ->8
|
cs |
<대소비교연산자> - 매우 중요한 부분을 차지하는 연산자. >, >=, <, <=, ==, !=
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
using namespace std;
void main() {
bool b1 = 10 > 20;
cout << b1 << endl; --> 0
bool b2 = 10 >= 20;
cout << b2 << endl; --> 0
bool b3 = 10 < 20;
cout << b3 << endl; --> 1
bool b4 = 10 <= 20;
cout << b4 << endl; --> 1
int b5 = 20 == 20;
cout << b5 << endl; --> 1
int b6 = 20 != 20;
cout << b6 << endl; --> 0
bool b11 = true, b12 = false, b13 = 'A', b14 = 3.14f, b15 = 0.0000001f;
bool b16 = 0, b17 = 1;
cout << b11 << endl; -> 1
cout << b12 << endl; -> 0
cout << b13 << endl; -> 1
cout << b14 << endl; -> 1
cout << b15 << endl; -> 1
cout << b16 << endl; -> 0
cout << b17 << endl; -> 1
bool 변수는 0이 아닌 모든수를 참으로 받아들인다.
}
|
cs |
<논리연산자, 축약연산자>
논리연산자 - &&(AND), ||(OR), !(NOT)
축약연산자 - +=, -=, *=, /=
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <iostream>
using namespace std;
void main() {
cout << (true && true) << endl; -->1
cout << (false && true) << endl; -->0
cout << (true && false) << endl; -->0
cout << (false && false) << endl; -->0
&& 연산자의 특징 -->> 앞에서 거짓이 하나라도 나오면 뒤에있는 조건은 수행하지 않는다.
int iA = 0;
bool b30 = (10 > 20) && (iA = 10); -----> iA = 10 은 대입연산자이지 대소비교 연산자(== 로 표현)가 아니다
cout << iA << endl; --> 0
위의 경우 (10>20)이 거짓이므로 (iA = 10) 을 수행하지 않는다. 따라서 iA값은 0 그대로 이다.
int iB = 0;
bool b31 = (30 > 20) && (iB = 10); ---> 10 = iB 으로 바꿔주면 해결가능(리터럴 상수에 값을 변환해주는건 오류)
cout << iB << endl;
위의 경우 (30 > 20)이므로 연산을 수행하고 그 다음 연산을 진행한다. 따라서 iB의 값은 10으로 변한다.
bool b23 = 10 < 20 < 30;
cout << b23 << endl;
먼저 연산 끝난 결과인 1과 30을 비교 하기 때문에 이건 당연히 클 수 밖에 없음
OR - AND 연산과 다르게 만약 앞에 참이 먼저 나온다면 애는 더이상 뒤를 연산하지 않는다
int h = 0;
cout << (false || (h = 999)) << endl; -->1
cout << (false || true) << endl; -->1
cout << (true || false) << endl; -->1
cout << (false || false) << endl; -->0
cout << h << endl; -->999
cout << !false << endl; -->1
cout << !true << endl; -->0
int playerhp = 100;
int monsteratt = 10;
playerhp = playerhp - monsteratt;
playerhp -= monsteratt;
}
|
cs |
<비트단위 연산자>
비트단위 연산자는 전부 정수형을 대상으로 한다.
비트단위를 계산 &(AND), |(OR), ~(NOT), ^(XOR)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include <iostream>
using namespace std;
void main()
{
&
0000 1000 -> 십진법 8
0000 1010 & -> 십진법 10
= 0000 1000
int a = 8 & 10;
cout << a << endl; ---> 8 (0000 1000)
|
0000 1000 -> 십진법 8
0000 1010 -> 십진법 10
0000 1010
int a = 8 | 10;
cout << a << endl; ---> 10 (0000 1010)
NOT
short b = ~1 ;
cout << b << endl; ---> -2
XOR ^
0000 1000 우리가 아는 숫자 8
0000 1010 ^ 애가 우리가 아는 숫자 10
0000 0010
int c = 10 ^ 8;
cout << c << endl; ---> 2
signed short g = ~1 + 1; ---> -1
(이진법에서 반전하고 +1 이랑 같음:부호만 바뀜)
cout << g << endl;
|
cs |
<시프트 연산자> <<, >>
비트단위 연산의 일종이다.
쉬프트 연산자를 이용할 때는 반드시 표현범위를 넘어가지 않게 잘 사용해야한다.
1
2
3
4
5
6
7
8
9
|
short a = 1 --> 0000 0001
a = a << 2; --> 0000 0100
cout << a << endl; ---> 4
int WindowX = 800;
WindowX >>= 1; --> 나누기 2랑 같은 말
cout << WindowX << endl; --> 400
|
cs |
'프로그래밍 > C++' 카테고리의 다른 글
증감연산자, 헝가리안 표기법 (0) | 2021.09.10 |
---|---|
형변환 (0) | 2021.09.10 |
자료형 (0) | 2021.09.07 |
변수 (0) | 2021.09.04 |
기본적인 코드 분석(main, namespace, void, cout 등) (0) | 2021.09.04 |