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

C++를 사용하여 숫자의 주어진 위치 또는 인덱스에서 비트 업데이트

<시간/>

주어진 문제에서 숫자의 주어진 인덱스의 비트를 업데이트해야 합니다. 번호를 업데이트하기 위해 주어진 번호에서 비트 조작 작업을 사용할 수 있습니다. 예를 들어,

입력-1 -

N= 25
bit= 1
position= 2

출력 -

29

설명 - 주어진 입력 25는 2진수로 '11001'로 쓸 수 있는 반면 위치 인덱스는 '2'이고 비트는 '1'이기 때문에. 주어진 위치에서 숫자를 바꾸면 '29'에 해당하는 '11101'이 출력됩니다.

이 문제를 해결하기 위한 접근 방식

숫자의 주어진 위치 또는 인덱스에서 작업은 입력에 제공된 특정 비트로 비트를 업데이트하는 것입니다. 주어진 위치에서 비트를 업데이트하는 접근 방식은 먼저 주어진 위치에서 비트를 지우고 이진 AND 연산을 수행하여 비트를 업데이트하는 것입니다.

  • 숫자 N, 업데이트할 비트를 '비트'로 입력하고 비트를 업데이트해야 하는 위치 또는 인덱스를 '위치'로 입력합니다.

  • void 함수 updateBit(int &n, int bit, int position)은 현재 비트의 주소, 비트 값 및 비트 인덱스를 사용합니다. 이 함수는 비트를 주어진 비트로 교체하여 숫자의 업데이트된 값을 인쇄합니다.

  • 주어진 위치에서 비트를 지우고 결과 비트를 결과에 추가합니다.

  • 마스크를 생성하고 그 결과와 AND 연산을 수행합니다.

  • 생성한 마스크로 Binary OR 연산을 수행하고 인덱스에서 업데이트할 값으로 오른쪽 시프트 연산을 수행합니다.

예시

#include<iostream>
using namespace std;
void updateBit(int &n,int bit, int pos){
   int clearBit= ~(1<<pos);
   int mask= n & clearBit;
   n= mask |(bit<<pos);
}
int main(){
   int n=25;
   int bit=1;
   int pos=2;
   updateBit(n,bit,pos);
   cout<<n;
}

출력

위의 코드를 실행하면 다음과 같이 출력이 생성됩니다.

29

입력이 25이므로 이진 표현으로 11001입니다. '2'인 위치를 '1'로 바꾸면 이진수로 29인 11101이 됩니다.