안녕하세요 틴구입니다!!
오늘은 어제 배운녀석들에 대해서 글을 써 볼까 해요
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
그럼 다음 시간에 만나요~
'c++' 카테고리의 다른 글
20210714 배열 ~ 빙고 게임 과제 (0) | 2021.07.15 |
---|---|
20210713 과제 풀이 ~ 난수 (0) | 2021.07.13 |
20210712 반복문 for, while, do while (0) | 2021.07.13 |
20210709 연산자 축약형 ~ 조건문 feat enum문 (0) | 2021.07.10 |
20210707 c++ 첫 시작부터 변수까지 (0) | 2021.07.08 |
댓글