프로그래밍/C++

연산자

FORHAPPy 2021. 9. 7. 22:28

<연산자의 종류>

대입연산자, 산술연산자, 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