더북(TheBook)

예를 들어 표 5-6에 따르면 A = 240에 대한 비트 집합은 {4, 5,6, 7}이고, B=287에 대한 비트 집합은 {0, 1, 2, 3, 4, 8}이다. 표에 나온 연산의 결과를 구할 때는 기본 집합의 전체 크기(정밀도 p)가 없어도 된다. 비트 집합의 세 가지 연산자에 대해 대입 연산자 버전인 &=, |=, ^=도 제공된다. Exs 5, Exs 6, Exs 7, Exs 8

또 다른 비트 연산자로 보수 연산자(complement operator)~가 있다. 가령 A의 보수인 ~A의 값은 십진수로 65295이고 비트 집합은 {0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15}다. 보수 연산은 해당 타입의 정밀도 p에 따라 달라진다.Exs 9, Exs 10

iso646.h 헤더를 인클루드하면 여기 나온 연산자를 각각 bitor, bitand, xor, or_eq, and_eq, xor_eq, compl 등으로 표현할 수 있다.

비트 집합은 주로 프로그램의 설정 사항을 지정하는 플래그(flag)를 표현할 때 활용한다.

enum corvid { magpie, raven, jay, chough, corvid_num, };
#define FLOCK_MAGPIE  1U
#define FLOCK_RAVEN   2U
#define FLOCK_JAY     4U
#define FLOCK_CHOUGH  8U
#define FLOCK_EMPTY   0U
#define FLOCK_FULL   15U

int main(void) {
  unsigned flock = FLOCK_EMPTY;
  ...
  if (something) flock |= FLOCK_JAY;
  ...
  if (flock&FLOCK_CHOUGH)
    do_something_chough_specific(flock);
}

 

 


Exs 5 A \ BA - (A&B)로 계산할 수 있음을 증명해 보자.

Exs 6 V + 6은 0임을 증명해 보자.

Exs 7 A^B(A - (A&B)) + (B - (A&B)) 또는 A + B - 2*(A&B)와 동치임을 증명해 보자.

Exs 8 A|BA + B - (A&B)와 동치임을 증명해 보자.

Exs 9 ~BV - B로 계산할 수 있음을 증명해 보자.

Exs 10 -B = ~B + 1임을 증명해 보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.