[따배씨++]Chapter2. 연산자
카테고리: Cpp
태그: Programming
인프런에 있는 홍정모님의 홍정모의 따라하며 배우는 C++ 강의를 듣고 정리한 내용입니다.
🚆 연산자 우선순위
삼항연산자
price = ( onSale == ture )? 10 : 100;
- (condition)? A : B
- true ➡️ A, false ➡️ B
- A, B는 같은 타입으로 맞추는게 좋음
🚆 비트단위 연산자
Bitwise Operator
unsigned int a = 0b0011;
unsigned int b = a << 1;
cout << bitset<4>(a) << endl; // 0011
cout << bitset<4>(b) << endl; // 0110
cout << bitset<4>(~a) << endl; // 1100
cout << bitset<4>(a&b) << endl; // 0010
cout << bitset<4>(a|b) << endl; // 0111
cout << bitset<4>(a^b) << endl; // 0101
<<
left shift : 1칸씩 왼쪽으로 (곱하기 2)>>
right shift : 1칸씩 오른쪽으로 (나누기 2)- pow(2,x) 보다 1 « x 가 훨씬 빠름
~
complement : 0️⃣ 🔄 1️⃣&
and,|
or^
XOR : 다르면 true, 같으면 false (논리연산자에서 !=)
Bit flags - 활용
const unsigned char opt0 = 1 << 0;
const unsigned char opt1 = 1 << 1;
const unsigned char opt2 = 1 << 2;
const unsigned char opt3 = 1 << 3;
unsigned char items_flag = 0;
items_flag |= opt0; // item0 obtain
items_flag &= ~opt0; // item0 lost
if (items_flag & opt1) // has item1?
cout << "has item1" << endl;
items_flag ^= opt2; // change item2's status
- 게임에서 아이템 유무 표기할 때 요긴함
Bit Masks - 활용
- 컴퓨터에서 색상을 표현할 떄 16진수를 이용한 rgb성분으로 표기함
- ex) Gray = #808080
- #808080 - red 성분 (1byte)
- #808080 - green 성분 (1byte)
- #808080 - blue 성분 (1byte)
0xDAA520 컬러에서 red 성분을 알고싶다?
const unsigned int red_mask = 0xFF0000;
unsigned int pixel_color = 0xDAA520;
unsigned int red = pixel_color & red_mask;
red = red >> 16;
cout << std::bitset<32>(red_mask) << endl;
cout << std::bitset<32>(pixel_color) << endl;
cout << "red " << bitset<8>(red) << endl; // red 11011010 출력
댓글 남기기