비트 단위로 연산이 진행될때 사용되는 연산자이다.
unsigned char byte = 1;
byte << 1;
하게되면 몇이 될까?
2가 된다. => 두배!
사진과 같은 경우
0 0 0 0 1 0 1 0 => 10진수로 10인 경우
을 << 1 왼쪽으로 밀면 어떻게 될까?
"두배"가 되어서 20이 된다.
0 0 0 1 0 1 0 0 => 20
만약
unsigned char byte = 10;
byte <<= 2;
10을 넣어넣고 2칸 밀면??
4배 가된다.
(참고로 비트연산자도 <<=, >>= 가능하다.)
실제로 이상태에서 2칸 밀면
4배인 40이 된다.
byte <<= 3; 은??
8배이다.
byte >>= 1;
은 무슨 말 일까?
그렇지. 오히려 1/2로 줄어들 것이다.
13일 경우는???
마지막 비트가 오른쪽으로 밀려서 소실됨,
그래서
byte >>= 1; 일경우는
2^1으로 나눈 몫에 해당할 것이고
byte >>= 2; 일경우 2^2(4)로 나눈 몫에 해당
byte가 13일 경우
byte >>= 4; 라면
13을 >>2 하면 10진수로 몫이 3이다.
이게 비트 단위로 진행할 연산이다.
~는
이런개념이다.
xor => 같으면 0 다르면 1이다.
<정리>
C++ 코드에서는 이런 "#"이 붙은 전처리기 부터 수행을 한 후 컴파일러가
코드를 보게된다.
"#define"이라는것이 있는데 ( == 매크로 )
내가 지정한 구문을 특정 숫자로 치환을 해준다.
#define HUNGRY 1
int main()
{
int food = HUNGRY;
return 0;
}
이렇게 되어있을 때 코드가 먼저 수행되기전
#define HUNGRY 1
int main()
{
int food = 1;
return 0;
}
1로 바꾸어 놓고 코드가 이제 수행되는 것이다.
그러면 이거 왜 쓸까?
장점이 두가지있음
1) 가독성
2) 유지보수 측면
2) -> HUNGRY로 다 작성했기 때문에
3으로 바꾸더라도 다 바뀐다.