[따배씨++]Chapter2. 연산자

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모님의 홍정모의 따라하며 배우는 C++ 강의를 듣고 정리한 내용입니다.


🚆 연산자 우선순위

cpp3_1


삼항연산자

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 - 활용

cpp3_2

  • 컴퓨터에서 색상을 표현할 떄 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 출력



맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기