1.대입 연산자
대입 연산자
- = : 오른쪽의 값을 왼쪽의 변수에 할당
- += : 오른쪽의 값을 왼쪽의 변수에 더해서 재할당
- -= : 오른쪽의 값을 왼쪽의 변수에 빼서 재할당
2.산술 연산자
산술 연산자
- +, -, *, / : 사칙연산
- % (modulus, 나머지): 나머지연산
- 실수 사이의 나누기에는 나머지가 존재하지 않는다
- 피연산자가 모두 정수인 경우에만 사용
- 증감연산자
- ++: 한 단계 증가
- --: 한 단계 감소
- 한 단계: 숫자의 경우에는 1일 수 있지만 다른 경우 또한 존재한다
- 전위 / 후위: 연산자 우선순위가 바뀐다
전위 (++n)
연산자 ++가 피연산자 n보다 앞에 위치할 때를 전위라 하고 1증가된 값이 연산결과값이다.
후위 (n++)
반대로 연산자 ++가 피연산자 n보다 뒤에 위치할 때를 후위라 하고 1증가하기 전 값이 연산결과값이다.
++ 연산자가 모든 연산자 중 가장 마지막에 수행
연산결과값
- '증감연산 그 자체의 값'
- 'n++이나 ++n' 그 자체의 결과값
n++이나 ++n 이라는 연산을 실행한 뒤 n을 출력한다면 위에서 보았듯이 n은 1이 증가된 값
그렇다면 n++, ++n 그 자체를 출력한다면 각각 n은 그대로, 1이 증가된 값이다
왠만하면 후위보다 전위로 쓰는 습관을 들이자
3. 논리 연산자
논리 연산자
연산의 결과가 0 or 1
- !: 역
- &&: 곱(AND)
- ||: 합(OR)
- true: 참
- 판단: 0이 아닌 값
- 반환: 대표적으로 1을 반환
- false: 거짓
- 0이면 거짓
bool 자료형
- true, false만 나타내는 / 다루는 자료형
- 0 아니면 1만 받는다
- 1 byte 자료형
4. 비교 연산자
비교 연산자
연산의 결과가 참 / 거짓
- ==: 같다
- !=: 다르다
- <: 왼쪽이 오른쪽보다 작을 때
- >: 왼쪽이 오른쪽보다 클 때
- <=: 왼쪽이 오른쪽보다 작거나 같을 때
- >=: 왼쪽이 오른쪽보다 크거나 같을 때
5. if / else 구문
if ( 조건문 ) { 조건문이 참일 경우 수행 }
else if ( 조건문 ) { 앞의 조건문이 모두 거짓 + 해당 조건문이 참일 경우 수행 }
.....
else if ( 조건문 ) { 앞의 조건문이 모두 거짓 + 해당 조건문이 참일 경우 수행 }
else { 앞의 모든 조건문이 거짓인 경우 수행}
6. switch
switch ( 조건문 )
{
case (value_1 or 변수): { 조건문의 반환 값이 value_1과 일치할 때 수행 (+ break;) }
.....
case (value_n or 변수): { 조건문의 반환 값이 value_n과 일치할 때 수행 (+ break;) }
default: { 위의 모든 case가 실행되지 않을 때 수행 }
- 문법적으로 if - else if - else 구문과 크게 차이가 없음
- if - else if - else 구문만 가능한 경우: 조건문이 복잡해질 경우 넣어줘야할 case가 표현이 힘듦
- switch case가 유리한 경우: 조건이 너무 길어지면 코드 가독성이 떨어짐
각 case의 수행문 마지막에 break; 를 달지 않으면 break 될 때까지 아래 case 혹은 default까지 쭉 수행한다
- 의도적으로 case끼리 묶어서 사용 가능
7. 삼항 연산자
조건식 ? 참이면 수행 : 거짓이면 실행
8.비트 연산자
<<, >>
bit를 화살표가 가리키는 방향으로 n칸씩 민다
<<= n: $2^{n}$배수
>>= n: $2^{n}$으로 나눈 몫
비트 단위 연산은 각 변수의 동일한 자리에 있는 비트끼리 연산
- &: 비트 곱 (둘 다 1인 경우 1)
- |: 비트 합 (둘 중 하나라도 1이면 1)
- |=: Status 누적해서 업데이트
- ^: XOR
- 같으면 0, 다르면 1 반환
- 1을 넣으면 나머지 값을 반대, 0을 넣으면 나머지 값을 그대로
- ~: 비트 반전
- 0은 1으로, 1은 0으로 변환
WHEN?
- 각 비트를 특정 상태를 나타내는 조합의 일부로 보는 관점
- 각 비트마다 담당하고 있는 상태가 다르다 (0이면 off, 1이면 on)
상태추가
- A |= B
상태 확인
- if (A & B)
특정 자리 비트 제거
- A &= (~B)
9. define
전처리기: # keyword로 작성
모든 complie 과정 중 제일 먼저 수행
# define: 지정한 구문을 특정 숫자로 치환해줌
- 가독성
- 변수가 가질 수 있는 여러 상태들이 중첩될 수 있음
- 숫자가 아니라 문자로 상태를 지정할 수 있음
- 코드 유지, 보수
- 모든 변수의 상태를 구문으로 지정했기 때문에 수정시 알아서 적용됨
10. Code 실습
#define HUNGRY 0x010
#define THIRSTY 0x002
#define TIRED 0x004
#define FIRE 0x008
#define COLD 0x100
#define POSION 0x020
#define COLD 0x040
#define COLD 0x080
#define COLD 0x100
#define COLD 0x200
#define COLD 0x400
#define COLD 0x800
int main()
{
// 연산자
// 대입 연산자, =
// 산술 연산자
// +,- , *, /, %(모듈러스, 나머지, 피연산자가 모두 정수)
// ++, --
int data = 10 + 10;
// data = da ta + 20;
data += 20;
data = 10 / 3;
data = int(10. / 3.);
data = int(10.f / 3.f);
data = 0;
data++; // 후위
++data; // 전위
// 후위 연산자로 사용하는 경우, 연산자 우선순위가 가장 나중으로 밀린다
a = 10;
data = a++; // = 이후에 a값이 1증가 -> data는 계속 10이다
data = ++a;
data = 0;
data--;
data--;
// 논리 연산자
// !(역), &&(곱), ||(합)
// 참(true), 거짓(false)
// 참: 0이 아닌 값, 주로 1을 반환
// 거짓: 0
true;
false;
bool truefalse = true;
bool IsTrue = 100;
IsTrue = true;
IsTrue = !IsTrue;
int iTrue = 100; // 0아닌 수는 모두 true로 본다
iTrue = !iTrue;
int iTrue = 0;
iTrue = !iTrue; // 1을 반환
iTrue = 0 && 200; // 0을 반환
iTrue = 0 || 300; // 1을 반환
// 비교 연산자
// == , !=, <. <=, >, >=
// 참, 거짓
// 구문
// if, else
if (0 & 200)
{
data = 100;
}
if (data == 100)
{
// if가 참일 경우 수행
}
else
{
// if가 거짓일 경우 수행
}
// switch case
int iTest = 20;
switch (iTest)
{
case 10:
break;
case 20:
break;
default:
break;
}
switch (iTest)
{
case 10:
case 20:
case 30:
default:
break;
}
// switch case와 동일한 else if 구문 생성
int iTest = 10;
if (iTest == 10)
{
}
else if (iTest == 20)
{
}
else
{
}
if (iTest == 10 || iTest == 20 || iTest == 30)
{
}
else
{
}
// 삼항 연산자
// :?
iTest == 20 ? iTest = 100 : iTest = 200;
if (iTest == 20)
{
iTest = 100;
}
else
{
iTest = 200;
}
// 비트 연산자
// 쉬프트 <<, >> (bit를 화살표가 가리키는 방향으로 1칸씩 민다)
unsigned char byte = 1;
// byte = byte << 1; 1칸 상승 -> 10진수 기준 2배 증가한다
byte <<= 1;
byte <<= 3; // 2^n 배수
byte >>= 1; // 2^n으로 나눈 몫
// 비트 곱(&), 합(|), XOR(^), 반전(~)
// 비트 단위 연산은 각 숫자의 동일한 자리에 있는 비트끼리 연산
// &: 둘다 1인 경우 1
// |: 둘 중 하나라도 1이면 1
// ^: 같으면 0, 다르면 1 반환
// ~: 1은 0으로, 0은 1으로
unsigned int iStatus = 0;
iStatus |= HUNGRY;
iStatus |= THIRSTY;
if (iStatus & THIRSTY)
{
}
// 특정 자리 비트 제거
iStatus & ~THIRSTY;
return 0;
}