그날의 코딩

220307_class

슬뷔 2022. 3. 7. 20:04
#include <iostream>

int main ()
{
 
// short : 2byte -32768 ~ 32767
short Number = 32767; // 범위 내의 숫자에서 벗어나면 경고가 뜸

std::cout << Number << std::endl;

bool Test1 = true; //true or false -> false는 0, 0이 아닌 모든 수는 true

std::cout << Test1 << std::endl;

char Text = 'A'; //char는 문자 1개만을 저장.(알파벳이나 숫자) 일어랑 한글, 한자는 2byte여서 저장 불가능, 문자는 작은따옴표 안에 작성하여 저장
int Number1 = 'A'; // 아스키코드표를 참조하여 그에 따른 값이 출력됨.

std::cout << Text << std::endl;
std::cout << Number1 << std::endl;

/*
변수는 값의 대입이 없을 경우 쓰레기 값이 들어가 있다.
그러므로 항상 변수의 값은 초기화를 해두고 사용하도록 한다.
*/

int Number2 = 0;

std::cout << Number2 << std::endl;

/*
변수는 선언을 하면 기본으로 signed가 된다.
모든 변수 타입들은 unsigned 키워드를 이용해서 - 값을 + 값으로 변환해서 사용할 수 있다.
*/
 
unsigned short Number3 = 0; // 0 ~ 65535 까지 표현이 가능해진다. (원래 범위는 -32768 ~ 32767)

std::cout << Number3 << std::endl;

/*
상수 : 한 번 값을 지정하면 변경할 수 없다.
const 키워드를 이용하면 변수를 상수로 만들 수 있다.
*/

const int Number4 = 202020;


//아래는 Number4가 상수이기 때문에 값을 변경할 수 없다.
//Number4 = 3333;

const unsigned int Number5 = 29828283;

/*
사칙연산자 : +, -, *, /, %, ++, -- // 전부 소괄호로만 감싸져 있음. C++에서는 중괄호, 대괄호는 존재하지 않음
10 % 3 = 1
% : 나머지 값을 구해주는 연산자 (정수 대 정수만 연산함. 소수를 연산하지 않음.)
값 % 2
 
나눗셈은 연산시에 A와 B가 모두 정수라면, 소숫점 자리가 짤리고 정수부분만 값으로 나오게 된다.
10 / 3 = 3.333333 (x)
10 / 3 = 3 (o)
소숫점자리까지 나오게 하려면 f변수가 있어야함.

++ : 1 증가
-- : 1 감소
*/

std::cout << "10 / 3 = " << 10 / 3 << std::endl;
std::cout << "10 / 3 = " << 10 / 3.0f << std::endl; // 3.0f = 3.f
std::cout << "10 % 3 = " << 10 % 3 << std::endl;

int Number6 = 100;

/*
Number6++;
++Number6;

연산자를 변수 앞에 붙이건 뒤에 붙이건 결과값은 동일.
아래처럼 변수의 뒤에 ++을 붙이게 되면, 먼저 변수에 있는 값을 출력한 후에 1이 증가
변수의 앞에 ++을 붙여주게 되면 먼저 값을 증가시킨 후에 그 값을 출력
*/

std::cout << ++Number6 <<std::endl;
std::cout << Number6 <<std::endl;

/*
관계연산자 : <, >, <=, >=, ==(같다), !=(다르다) // !는 부정의 의미로 사용
결과값이 true, false 으로 나오게 된다.
10 < 20 = true
10 > 20 = false
10 <= 20 = true
10 >= 20 = false
10 == 20 = false
10 != 20 = true
*/

std::cout << "10 < 20 = " << (10 < 20) << std::endl;
std::cout << "10 > 20 = " << (10 > 20) << std::endl;
std::cout << "10 <= 20 = " << (10 <= 20) << std::endl;
std::cout << "10 >= 20 = " << (10 >= 20) << std::endl;
std::cout << "10 == 20 = " << (10 == 20) << std::endl;
std::cout << "10 != 20 = " << (10 != 20) << std::endl;

/*
논리연산자 : AND(&&), OR(||)(Shift + \), NOT(!)
참/거짓 : 참/거짓 을 연산하여 결과로 참/거짓이 나오게 된다.

AND : A와 B 둘 다 참일 경우에만 참이 되고, 나머지는 거짓이 된다.
OR : A와 B 둘 중 하나라도 참이면 참이고, 아니면 거짓이 된다.

A B AND OR
0 0 0 0
1 0 0 1
0 1 0 1
1 1 1 1

A NOT
0 1
1 0

*/
 
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 = " << (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;

/*
10진수 : 0 ~ 9 사이의 숫자를 조합하여 사용
2진수 : 0 ~ 1 사이의 숫자를 조합하여 사용
8진수 : 0 ~ 7 사이의 숫자를 조합하여 사용
16진수 : 0 ~ 9 는 일반 숫자로 사용을 하고, 10 ~ 15는 알파벳 A ~ F 로 사용한다. // 10: A 11: B 12: C 13: D 14: E 15: F
0x를 붙여서 16진수라고 표현해준다.

10진수 123을 2진수와 16진수로 변환해보자.
2진수로 변환, 10진수를 2로 계속 나누어서 몫과 나머지를 구한다.
123 / 2 = 61 .. 1
61 / 2 = 30 ... 1
30 / 2 = 15 ... 0
15 / 2 = 7 .... 1
7 / 2 = 3 ..... 1
3 / 2 = 1 ..... 1

1 1 1 1 0 1 1
64 32 16 8 4 2 1
64 + 32 + 16 + 8 + 2 + 1 = 123

1111011 -> 16진수로 변환

16진수 1자리는 2진수 4자리로 구성된다.
2진수의 가장 오른쪽부터 4자리씩 분리한다.
왼쪽 부분이 자리수가 부족하다면 0을 왼쪽에 채워준다.

0111 / 1011
8421 / 8421 (2의 n승 단위로 값을 부여해준다.)

123 -> 0x7b

11 / 2 = 5 .. 1
5 / 2 = 2 ... 1
2 / 2 = 1 ... 1

7 / 2 = 3 ... 1
3 / 2 = 1 ... 1

0111 / 1011

비트 단위 논리연산자 : AND(&), OR(|), NOT(~), XOR(^)

A B XOR
0 0 0
1 0 1
0 1 1
1 1 0
 
99 : 1100011
123 : 1111011

123 & 99 =
1111011
&1100011
-------
1100011

123 | 99 =
1111011
|1100011
-------
1111011

~123 =
~00000000 00000000 0000000 01111011
11111111 11111111 1111111 10000100

123 ^ 99 = 123
1111011
^1100011
-------
0011000
*/

std::cout << "123 & 99 = " << (123 & 99) << std::endl;
std::cout << "123 | 99 = " << (123 | 99) << std::endl;
std::cout << "~123 = " << ~123 << std::endl;
std::cout << "123 ^ 99 = " << (123 ^ 99) << std::endl;



return 0;
}

'그날의 코딩' 카테고리의 다른 글

220315_class  (0) 2022.03.15
220314_class  (0) 2022.03.15
220308_class  (0) 2022.03.08
220304_code_review  (0) 2022.03.06
220304  (0) 2022.03.06