-> "개념", "행동", "상태"로 인간의 욕구를 구분
ex)
#include <iostream>
void MonsterMove()
{
int MonsterSpeed = 4;
}
int main() // 프로세스의 시작
{ // 지역 시작
// 지역 변수
int MonsterSpeed = 1;
MOnsterMove();
} // 지역 끝
규칙
- 같은 이름의 변수는 같은 영역 안에 2번 선언할 수 없음
-> 같은 이름의 변수는 메모리 영역이 겹치기 때문- main 함수에 만들 수 있으면 다른 함수에도 만들 수 있음
- 영역이 다르면 같은 이름의 변수를 만들 수 있음
-> 변수 앞에 생략된 이름이 다름
-> 메모리에 저장되는 영역이 다름
int main()
{
int A = 10; // 지역 변수
}
tip) 이름 없는 메모리 영역 만들기
int main()
{
int Value = 0;
// 이름 없는 메모리 영역
{
Value = 10;
int Value2 = 0; // 된다
}
Value = 20; // 안된다
}
int A = 10; // 전역 변수
int main()
{
}
-> 클래스를 배우고 나서...
메모리 구조

메모리에서 프로그램

cf) 영역(Range, Scope) == 지역(Local)
스택 영역

데이터 영역

- 경로 및 함수 변수 절대 한글 금지
- 프로젝트 폴더 바탕화면에 금지
- 변수명은 FullName으로 작성
- 전역 변수와 지역 변수 이름은 다르게 작성
- 변수 생성시 무조건 리터럴 값(초기화)을 작성
- 함수의 인자 이름 앞에는 _를 붙임
- 암시적 형변환은 피하기
- 자료형이 다르면 정당한 캐스팅을 통해서만 형변환을 할 것
-> C 스타일 형변환 하지 않음- 포인터를 초기화 할때 0을 사용하지 않음 (nullptr 사용)
ex)
int GlobalA = 10; // 전역 변수
void Test()
{
int LocalA = 10; // 지역 변수
}
tip) 함수를 사용한 상태로 빌드 하는 것이 좋다 (함수를 만들고 사용을 안하면 Compiler에 의해 삭제 되고 실행될 수 있음)
int main()
{
int Left = 3;
// 오른쪽에서 왼쪽으로 읽는다.
// 1. 3을 준비
// 2. 대입 연산자를 준비
// 3. Left를 만든다.
// 4. 대입한다.
}-> 변수를 사용해서 특정한 결과를 반환하는 것
-> 연산자 == 함수 == 행동
-> 연산자는 무조건 같은 자료형끼리 구성
->> 다른 자료형일 경우 형변환이 일어날 수도 있음
종류
1. 산술 연산자
2. 비교 연산자
3. 관계 연산자
4. 비트 연산자
5. 복합 할당 연산자
6. 멤버와 포인트 연산자
7. 기타 연산자
1) 단항 연산자
- 변수 1개 필요
ex) !
2) 이항 연산자
- 변수 2개 필요
ex) +, ==, = - 등...
3) 삼항 연산자
- 변수 3개 필요
ex) ? :
cf) 변수의 사용방법
-> 앞에 자료형이 붙어있으면 만듬
-> 사용할 때는 자료형을 생략하고 사용
1) = (대입 연산자)
int main()
{
int Left = 3;
int Right = 5;
Left = Right;
// 오른쪽(Right)의 메모리를 왼쪽(Left)의 메모리로 복사
}
2) + (뎃셈)
int main()
{
int Left = 3;
int Right = 5;
int Result = 0;
Result = Left + Right;
}
3) - (뺄셈)
int main()
{
int Left = 3;
int Right = 5;
int Result = 0;
Result = Left - Right;
}
4) * (곱셈)
int main()
{
int Left = 3;
int Right = 5;
int Result = 0;
Result = Left * Right;
}
5) / (몫 연산자)
int main()
{
int Left = 3;
int Right = 5;
int Result = 0;
Result = Left / Right;
// Left를 Right로 나눈 몫
}
6) % (나머지 연산자)
int main()
{
int Left = 3;
int Right = 5;
int Result = 0;
Result = Left % Right;
// Left를 Right로 나눈 후 나머지
}
1) == (값 같은지 비교)
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
Result = Left == Right;
// Left가 Right와 같은지 값 비교
// 같으면 true
// 다르면 false
}
2) != (값이 같지 않은지 비교)
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
Result = Left == Right;
// Left가 Right와 같은지 값 비교
// 같으면 false
// 다르면 true
}
3) >
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
Result = Left > Right;
// Left가 Right와 같은지 값 비교
// 크면 true
// 작으면 false
}
4) <
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
Result = Left < Right;
// Left가 Right와 같은지 값 비교
// 크면 false
// 작으면 true
}
5) >=
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
Result = Left < Right;
// Left가 Right와 같은지 값 비교
// 크거나 같으면 true
// 작으면 false
}
6) <=
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
Result = Left < Right;
// Left가 Right와 같은지 값 비교
// 작거나 같으면 true
// 크면 false
}
참과 거짓에 대해 이해해야 함
비트 단위로 자료형을 바라볼 수 있어야 함
참
-> 모든 비트 중 단 1개라도 1이 있으면 참
-> 0제외 모든 숫자는 참
int main()
{
bool bResult = false;
bResult = 3; // true
}
int main()
{
bool bResult = false;
bResult = 0; // false
}
1) ! (논리 부정 = Not)
int main()
{
bool bResult = false;
bResult = !Result
// false -> true
// true -> false
}
2) && (논리 합 = AND)
-> 모든 메모리가 참이어야 참 리턴
-> true && true 일 경우에만 true
-> 나머지는 false
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
bResult = Left && Right;
// true && ture => true
bResult = false && Right;
// false && ture => false
bResult = Left && false;
// true 8& flase => false
bResult = false || false;
// false && false => false
}
3) || (논리 곱 = OR)
-> 모든 메모리가 거짓이어야 거짓 리턴
-> false || false 일 경우에만 false
-> 나머지는 모드 true
int main()
{
int Left = 3;
int Right = 5;
bool bResult = false;
bResult = Left || Right;
// true && ture => true
bResult = false || Right;
// false && ture => true
bResult = Left || false;
// true 8& flase => true
bResult = false || false;
// false || false => false
}
정수의 비트 표현식
-> ex) int => 4byte => 32bit
비트
-> 가장 앞 비트는 부호 비트
- 0 : 양수
-> 그냥 양수 표현식으로 계산
- 1 : 음수
-> 2의 보수법 적용- 2의 보수법
->> 음수로 만들 경우 모든 비트를 뒤집고 1을 더한 것
ex) 1 = 0001 -> 모두 뒤집기 = 1110 -> 1 더하기 = 1111 -> -1
ex) 2 = 0010 -> 모두 뒤집기 = 1101 -> 1 더하기 = 1110 -> -2cf) 2의 보수 쉽게 적용하는 법
-> 양수 표현식에서 뒤집는다.
=> 모든 값이 1로 채워졌을 때를 -1로 본다.
=> 0인 부분의 숫자를 음수로 더해줌
1) ~ (비트 Not)
int main()
{
int Left = 0;
int Right = 0;
Left = 0b00000000000000000000000000000000; // 0
Left = ~0b00000000000000000000000000000000; // -1
// -> 0b11111111111111111111111111111111 // -1
}
2) & (비트 AND)
-> 왼쪽과 오른쪽을 비교해서 true true일 경우에만 true
-> 나머지는 false
int main()
{
int Left = 0;
int Right = 0;
int Result = 0
Left = 0b00000000000000000000000000000011; // 3
Right = 0b00000000000000000000000000000001; // 1
Result = Left & Right;
// Left = 0b00000000000000000000000000000011; // 3
// Right = 0b00000000000000000000000000000001; // 1
// Result = 0b00000000000000000000000000000001; // 1
}
3) | (비트 OR)
-> 왼쪽과 오른쪽을 비교해서 하나라도 true일 경우에 true
-> 모두 false일 경우에만 false
int main()
{
int Left = 0;
int Right = 0;
int Result = 0
Left = 0b00000000000000000000000000000011; // 3
Right = 0b00000000000000000000000000000001; // 1
Result = Left | Right;
// Left = 0b00000000000000000000000000000011; // 3
// Right = 0b00000000000000000000000000000001; // 1
// Result = 0b00000000000000000000000000000011; // 3
}
4) ^ (비트 XOR = 베타적 논리합)
-> 양쪽의 비트가 같으면 0
-> 양쪽의 비트가 다르면 1
int main()
{
int Left = 0;
int Right = 0;
int Result = 0
Left = 0b00000000000000000000000000000011; // 3
Right = 0b00000000000000000000000000000001; // 1
Result = Left ^ Right;
// Left = 0b00000000000000000000000000000011; // 3
// Right = 0b00000000000000000000000000000001; // 1
// Result = 0b00000000000000000000000000000010; // 2
}
5) << (비트 시프트)
-> 비트를 왼쪽으로 밀어 넣음
int main()
{
int Left = 0;
int Result = 0
Left = 0b00000000000000000000000000000001; // 1
Result = Left << 1;
// Left = 0b00000000000000000000000000000001; // 1
// Result = 0b00000000000000000000000000000010; // 2
}
5) >> (비트 시프트)
-> 비트를 오른쪽으로 밀어 넣음
-> 밀어서 끝단까지 갈 정도로 사용하지 않음
->> 밀어서 끝단까지 가게되면? 하드웨어(CPU 칩셋)에 따라 달라짐
->>> 잘 사용하지 않음
int main()
{
int Left = 0;
int Result = 0
Left = 0b00000000000000000000000000000001; // 1
Result = Left >> 1;
// Left = 0b00000000000000000000000000000001; // 1
// Result = 0b00000000000000000000000000000000; // 2
}
1) sizeof()
#include <iostream>
int main()
{
int Value = 0;
int IntSize = 0;
IntSize = sizeof(int);
IntSize = sizeof(Value);
}
#include <iostream>
int main()
{
int Left = 0;
int Right = 0;
int Result = 0;
// 양수 최대값 구하기
// Left = 0b11111111111111111111111111111111 -> -1
// xor
// Right = 0b10000000000000000000000000000000 -> 음수 최대값
// Result = 0b01111111111111111111111111111111 -> 양수 최대값
Left = 0;
Left = ~Left; // -1
Right = 1 << 31; // 음수 최대값
Result = Left ^ Right; // 양수 최대값
int Answer = 0b01111111111111111111111111111111;
return 0;
}
Bool 자료형
cf) 중단점 (빨간점)
-> 코드를 보다보면 중간단계 확인이나 현재까지 진행한 단계와 그 상태에서의 값을 확인하고 싶을 때 자신이 확인하고 싶은 코드 라인 1줄 아래에 F9를 누르면 중단점이 걸림


tip) 단축키
F9 = 중단점 생성 및 삭제
F5 = 중단점이 있으면 중단점이 있는 곳 까지만 실행 후 멈춤
F10 = 코드 한 줄씩 진행 (다른 함수의 스택으로 들어가지는 않음)
F11 = 한줄 씩 진행하지만 다른 함수가 있다면 함수 내부 스택까지 들어감
tip) 필터 / 솔루션 폴더
