Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 범위의 비트 및(또는 &)

<시간/>

이 문제에서는 두 개의 정수 값과 b가 제공됩니다. 그리고 우리의 임무는 비트 단위 및 (&) 범위에서 b까지를 찾는 것입니다. . 이것은 우리가 &a+1 &a+2 &… b-1 &b의 값을 찾아야 한다는 것을 의미합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 - a =3, b =8

출력 - 0

설명3 &4 &5 &6 &7 &8 =0

이 문제를 해결하기 위해 간단한 해법은 에서 시작하여 1을 b로 증가시켜 모든 숫자의 비트를 찾는 것입니다.

더 효과적인 솔루션

이것은 보다 효과적인 솔루션이며 −

를 사용하여 수행할 수 있습니다.

1단계 - b의 LSB를 뒤집습니다.

2단계 − 숫자와 b를 비교하여 범위 내에 있는지 확인,

2.1단계 - 숫자가 플립보다 크면 LSB 이득입니다.

2.2단계 - 그 다음 숫자보다 크지 않은 경우 =결과입니다.

이제 의 작업에서 위의 알고리즘을 참조하십시오 -

- a =3 및 b =8.

해결책 -

1단계 − b =8(1000), 숫자에서 유일한 LSB를 뒤집습니다. 숫자는 0000 즉 0이 됩니다.

2단계 - 0은 3보다 작고, 0은 결과입니다.

예시

이제 문제를 해결하는 코드를 살펴보겠습니다.

#include <stdio.h>
int main(){
   long a, b;
   a = 3; b = 8;
   do{
      b -= (b & -b);
   }while(a < b);
   printf("%li", b);
}

출력

0