unsigned char byte = 1;
이렇게 썼다고 치면 1byte 공간, 8bits 공간에서 0000 0001
byte << 1;
이걸 쓰면? --> 0000 0010unsigned char byte = 10;
byte = byte << 1;
printf("%d\n", byte); // <-- 이건 20 // byte <<= 1; 이렇게 써도 됨
<< 2는 4배, << 3은 8배
>>
2는 1/2, 맨 오른쪽의 1은 밀려서 사라져버림
따라서 2로 나눈 몫이 됨 (나머지가 날아가기 때문)
unsigned int a = 10; // 이진 표현: 0000 1010
unsigned int b = 6; // 이진 표현: 0000 0110
unsigned int result = a & b;
// 결과: 0000 0010 (2), 둘다 1이어야 1
// and
unsigned int a = 10; // 이진 표현: 0000 1010
unsigned int b = 6; // 이진 표현: 0000 0110
unsigned int result = a | b;
// 결과: 0000 1110 (14), 둘중 하나만 1이면 1
// or
unsigned int a = 10; // 이진 표현: 0000 1010
unsigned int b = 6; // 이진 표현: 0000 0110
unsigned int result = a ^ b;
// 결과: 0000 1100 (12), 같으면 0 다르면 1
// xor
unsigned int a = 10; // 이진 표현: 0000 1010
unsigned int result = ~a;
// 결과: 1111 0101 (4294967285), 각 자릿수 뒤집기
// not
#define
--> 내가 지정한 구문을 숫자로 치환해줌
#define HUNGRY 1 // 이렇게 쓰면?
int test = HUNGRY; // test가 1이라는 코드가 됨 <-- 전처리기 때문에 코드 실행전에 HUNGRY가 다 1로 변하고 컴파일 됨
define을 사용하는 것의 이점 : 가독성 --> 게임으로 치면 냉기상태 27, 화상 30... 이렇게 있을때 프로그래머가 이 숫자를 다 외울 수 없음 --> 그런데 문자로 쓰면 알아보기 쉬움
코드 몇백군데를 돌아다니면서 수정 안해도 됨 --> 그냥 전처리기에서 숫자만 바꾸면 끝 (유지보수 good)