비트연산 질문

hwlee의 이미지

unsigned int a = 0xfedf

unsigned int b = 0xfcdf

--> 즉.. 이진수로 표현하면

a = 1111111011011111

b = 1111110011011111

여기서 보면 한 비트만.. 1 에서 0 으로 바뀌었는데..

몇번째 비트가 바뀌었는지 알려면 . 어떤 비트연산자를 사용해야 하나요?

또한 0 에서 1로 바뀌었는지 1에서 0으로 바뀌었는지 어떻게 알아나요?

bugiii의 이미지

어떤 값이 어떻게 변했는지를 비트 상태로 알고 싶다면

a ^ b (xor)

하셔서 나온 값이 0 이면 변화가 없고 0 이 아니면 뭔가가 변한거겠죠.

어떤 비트가 변했는냐는 단순하게 루프를 돌면서 비트 마스크로 체크하시면 되겠겠습니다. 변화가 있는 (0->1, 1->0 이든 상관없이) 비트는 1로 변경될 것입니다.

1 에서 0, 0 에서 1 로 변한 것을 알고 싶으시다면 이전 값 기억하고 어째어째 하시면 될 듯 한데요....

그럼, 이만...

vajna의 이미지

uint a;
uint b;

a=somevalue;
b=somevalue;

for(i=0;i<32;i++){
 if(((a ^ b) & (1 << i))){
  printf(" bit%d of a is differ from b(LSB0~MSB31)\r\n", i);
  printf(" current a state is %s\r\n", (a & (1 << i))?"TRUE":"FALSE");
  BitProcess(i);
 }
}

머나먼 땅으로 우리 동무가 이제 떠나간다네.
고향의 바람이 불어와 동무 뒤를 따르고
사랑스러운 도시가 푸른 이내 속에서 사라지네.
정든 집, 푸른 동산, 부드러운 눈길도...

hwlee의 이미지

답변 감사드립니다...