c++

20210708 변수부터 연산자까지

TIN9 2021. 7. 9.
반응형

안녕하세요 틴구입니다!!

오늘은 어제 배운녀석들에 대해서 글을 써 볼까 해요

7월 7일에는 변수 타입에 대해서 배웠는데 8일에는 변수 입출력 방법과 상수, 연산자에 대해서 배웠습니다

 

우선 변수의 경우 선언과 동시에 초기화를 할 수 있습니다

ex) int Number = 0;

 

또 변수를 선언하고 값을 대입을 안 할 경우 쓰레기 값이 들어가 있다고 하네요

int Number1;

그래서 이런 경우는 cin이라는 것을 활용해서 사용자가 Number1에 int의 값을 입력해서 활용하는 방법이 있습니다

 

std::cin >> Number1;

 

std::cout << Number1 << std::endl;  이렇게 말이죠

 

이걸 보니깐 cin을 가지고 게임에서처럼 닉네임 같은걸 설정할 수 있을 거 같아요(아닌가?..)

물론 지금은 int란 변수를 사용해서 안 되겠지만요??

상수

다음으로는 상수란 것을 배웠는데

상수란 값을 바꿀 수 없는 메모리라고 하네요

상수를 사용할 때는 변수 타입 앞에 const를 붙여서 사용하면 된답니다

ex) const int cNumber = 7777; 이렇게요!!

상수는 값을 바꿀 수 없기 때문에 반드시 선언과 동시에 본인이 원하는 값으로 초기화를 해놓고 사용해야 한답니다.

위에 const int cNumber = 7777; 이라고 선언을 했기 때문에

밑에서 cNumber = 5000; 이라고 바꿀 수가 없어요!

연산자

상수 다음으로 연산자에 관하여 배웠는데

연산자에는 대입 연산자, 사칙연산자, 논리연산자, 비트단위 논리연산자, 쉬프트연산자 총 5가지 연산자를 배웠어요

대입연산자

먼저 대입 연산자의 경우는 =을 뜻합니다

대입연산자의 경우에는 = 오른쪽의 값을 왼쪽으로 대입시켜줍니다

ex) int exNumber = 10000; 이렇게 말이죠

대입 연산자는 모두가 아는 거니깐 바로 넘어갈게요!

사칙연산자

다음은 사칙 연산자인데

사칙연산자는 저희가 다 아는 것처럼

+, -, *, /이 있고 % 라는 나머지 연산자가 존재합니다.

+, -, *, / 는 다들 아시다시피 더하기, 빼기, 곱하기, 나누기이고

% 의 경우에는 나머지연산자라고 11 / 3 = 3 --- 2   몫이 3 --- 나머지 2 이렇게 나오는데

이중에 나머지 2를 구하는 연산자라고 합니다.

아 그리고 사칙연산자의 우선순위는 *, / 가 +, -보다 우선순위가 높아서 먼저 연산된다고 합니다.

또 연산 시 우선순위를 위해서 괄호를 지원하는데

프로그래밍에서는 중괄호 대괄호를 지원 안 하고 소괄호( )만 지원합니다.

관계연산자

관계연산자의 부호는 : <, >, <=, >=, ==, != 가 있습니다.

왼쪽부터 작다, 크다, 작거나 같다, 크거나 같다, 같다, 다르다 순이고

프로그래밍에서의 !은 대부분 부정의 의미를 나타낸다고 합니다!!

 

관계연산자의 경우에는 값 대 값을 연산하여 참/거짓이 나오게 되는 연산자라고 하네요.

 

여기서 참/거짓이 있는데 참은 0이 아닌 모든 수를 의미하고 거짓은 0을 의미합니다

 

참고로 C++에서의 true는 기본으로 1로 설정되어 있습니다.

 

여기서 각 부호마다 하나씩 예를 들어볼게요.

 

먼저 참/거짓을 표현하기 위해서 bool이란 변수를 사용하겠습니다.

bool Test = 1 < 2;

 

std::cout << "1 < 2 = " << Test << std::endl;

 

Test = 1 > 2;

 

std::cout << "1 > 2 = " << Test << std::endl;

 

Test = 1 <= 2;

 

std::cout << "1 <= 2 = " << Test << std::endl;

 

Test = 1 >= 2;

 

std::cout << "1 >= 2 = " << Test << std::endl;

 

Test = 1 == 2;

 

std::cout << "1 == 2 = " << Test << std::endl;

 

Test = 1 != 2;

 

std::cout << "1 != 2 = " << Test << std::endl;'

 

이렇게 선언을 했을 때 나오는 숫자를 보면

1 < 2 = 1
1 > 2 = 0
1 <= 2 = 1
1 >= 2 = 0
1 == 2 = 0
1 != 2 = 1

이렇게 나오게 됩니다.

여기서 뒤에 나오는 1은 참, 0은 거짓을 의미하니 딱 맞아떨어지네요.

논리연산자

다음으로는 논리연산자에 대하여 적어 보도록 하겠습니다.

논리연산자의 종류에는 : AND(&&), OR(||), NOT(!)이 있고

논리연산자의 경우에는 참/거짓 대 참/거짓을 연산하여 참/거짓으로 나타나게 됩니다.

AND연산자의 경우에는 둘 다 참일 때만 참이고 나머지는 거짓으로 나타냅니다.

OR연산자의 경우에는 하나라도 참이면 참이고 나머지는 거짓으로 나타냅니다.

NOT연산자의 경우에는 반대의 결과로 나타냅니다 (참은 거짓으로 거짓은 참으로)

이렇게 보기에는 헷갈리니까 한번 예로 들어볼게요

// AND연산자

std::cout << "false && false = " << (false && false) << std::endl;
std::cout << "false && true = " << (false && true) << std::endl;
std::cout << "true && false = " << (true && false) << std::endl;
std::cout << "true && true = " << (true && true) << std::endl;
// OR연산자
std::cout << "false || false = " << (false || false) << std::endl;
std::cout << "true || false = " << (true || false) << std::endl;
std::cout << "false || true = " << (false || true) << std::endl;
std::cout << "true || true = " << (true || true) << std::endl;
// !연산자
std::cout << "!false = " << !false << std::endl;
std::cout << "!true = " << !true << std::endl;

 

이렇게 출력을 하면

 

false && false = 0
false && true = 0
true && false = 0
true && true = 1


false || false = 0
true || false = 1
false || true = 1
true || true = 1


!false = 1
!true = 0

 

이렇게 나오게 됩니다!!

말 그대로 false자리에 0을 넣고, true자리에 1을 대입했을 때 그거에 대한 연산의 값을 참/거짓으로 나타내기 때문에

0 or 1로 나오게 된 겁니다.

 

다음으로 비트단위 연산자에 대해서 말씀드리기 전에

진수 변환에 대해서 적어보도록 하겠습니다.

진수변환

우선 진수의 경우에는 2진수, 8진수, 10진수, 16진수로 이루어져 있는데 보통 2, 10, 16진수를 사용합니다.

2진수의 경우에는 0, 1   2가지로 구성되는 진수입니다.

10진수의 경우에는 0 ~ 9 사이로 구성된 진수입니다

16진수의 경우에는 0 ~ 15 사이로 구성된 진수인데 단 10 ~ 15의 경우에는 a ~ f로 표현합니다.

 

각 진수마다 표현 방법이 다른데 2진수의 경우에는 앞에 0b를 붙여주고 16진수의 경우에는 0x를 붙여줍니다

ex) 0b1101111 --- 2진수

     0x6f --- 16진수

 

 

10진수 111을 2진수, 16진수로 변환해보겠습니다.

 

먼저 2진수로 변환

111 / 2 = 55 --- 1

55 / 2 = 27 --- 1

27 / 2 = 13 --- 1

13 / 2 = 6 --- 1

6 / 2 = 3 --- 0

3 / 2 = 1 --- 1

로 나누어지는데 여기서 몫부터 나머지까지 순서대로 올라가면 됩니다

 

1101111이 111의 2진수로 변환했을 때의 모양입니다.

 

여기서 16진수로 변환하는 방법은

1101111을 > 방향에서 부터 4자리씩 끊어줍니다

 

그럼 110 / 1111 이 되는데 앞에가 3자리니깐 맨 앞에다가 0을 임시로 붙여줍니다

(0)110 / 1111

8 421 / 8421 밑에처럼 숫자를 대입해준 다음 2진수에 1로 표현된 자리 숫자들을 다 더해줍니다

 

6 / 15 이걸 16진수로 표현을 하게 되면

0x6f가 됩니다. 참 쉽죠???

 

그럼 비트단위 논리연산자로 넘어가 볼까요

비트단위 논리연산자

비트단위 논리연산자는 AND(&), OR(|), NOT(~), XOR(^)로 구성되어 있습니다.

비트단위 논리연산자는 논리연산자와 다르게 값 대 값으로 연산하여 값을 나오게 하는 연산자입니다.

AND, OR, NOT은 논리연산자와 똑같은 방식으로 연산을 하는데

XOR 같은 경우는 둘이 같을 때 거짓이고 다를 때 참이 나옵니다.

비트단위 논리연산자의 연산 방법은 연산하는 값들을 2진수로 변환 후 2진수 각 자리별로 논리연산을 하는 방법입니다.

111 & 91 = 

ex)  1101111

  & 1011011

---------------

     1001011 이 나오게 되어

111 & 91 = 75가 나오게 된다.

 

나머지도 똑같이 연산하면 됩니다!

 

또 OR, XOR 연산자로 rpg 게임에서처럼 버프를 on/off 할 수 있는 방법을 배웠고

AND 연산자로 버프가 켜져 있는지 꺼져있는지 확인하는 방법을 배웠습니다!!

쉬프트연산자

다음은 쉬프트 연산자인데 쉬프트 연산자는 <<, >> 두 가지가 있습니다.

쉬프트 연산자도 값 대 값을 연산하여 값을 결과로 나오게 하는 연산자입니다

쉬프트 연산자도 2진수 단위의 연산을 처리한다고 하네요

 

위에서 111을 2진수로 바꾸면 1101111이 나오는데

 

111 << 2 = 의 경우를 예로 들면 

1101111에서 오른쪽에 0 두 개를 붙이라는 의미이다 그러면

110111100이 되는데 이걸 10진수로 계산을 하면 444가 된다

11 << 3 = 의 경우는

1101111000이 되는데 이걸 10진수로 계산을 하면 888이 된다

반대로 11 >> 2 = 의 경우는

1101111에서 오른쪽에 0 두개를 없애라는 의미이므로

11011이 되고 즉 27이 된다

또 11 >> 3 = 의 경우는

1101이 되고 13을 의미한다.

 

std::cout << "111 << 2 = " << (111 << 2) << std::endl;
std::cout << "111 << 3 = " << (111 << 3) << std::endl;

std::cout << "111 >> 2 = " << (111 >> 2) << std::endl;
std::cout << "111 >> 3 = " << (111 >> 3) << std::endl;

 

111 << 2 = 444
111 << 3 = 888
111 >> 2 = 27
111 >> 3 = 13

 

그럼 다음 시간에 만나요~

반응형

댓글