Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

बिटवाइज़ OR (या - ) C++ में किसी श्रेणी का

इस समस्या में, हमें दो पूर्णांक मान a और b दिए गए हैं। और हमारा काम ए से बी तक की सीमा के बिटवाइज OR (|) को खोजना है। इसका अर्थ है कि हमें a का मान ज्ञात करना होगा। ए+1 | ए+2 | ... बी-1 | ख.

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट - ए =3 , बी =8

आउटपुट − 15

स्पष्टीकरण - 3 | 4 | 5 | 6 | 7 | 8 =15

समस्या को हल करने के लिए, एक सरल समाधान है a से शुरू करना और बिट-वार या सभी संख्याओं में से एक को बढ़ाकर b करना।

अधिक प्रभावी समाधान,

यह एक अधिक प्रभावी उपाय है, इसका उपयोग करके किया जा सकता है -

चरण 1 - a और b दोनों के लिए MSB बिट खोजें, मान लें कि उन्हें MSBa और MSBb कहते हैं।

चरण 2 - जांचें कि एमएसबीए एमएसबीबी के बराबर है या नहीं।

चरण 2.1 - अगर एमएसबीए और एमएसबीबी बराबर हैं। करो,

चरण 2.1.1 - परिणामों के MSB को 1 के रूप में सेट करें।

चरण 2.1.2 - एमएसबी को ए और बी से घटाएं जो ए और बी के लिए नया मान होगा। चरण 1 पर जाएं।

चरण 2.2 - यदि एमएसबीए और एमएसबीबी बराबर हैं। करो,

चरण 2.2.1 - परिणाम के सभी बिट्स को 0 से अधिकतम (MSBa, MSBb) पर सेट करें।

चरण 3 - प्रिंट परिणाम।

अब, ऊपर दिए गए एल्गोरिथम को काम करते हुए देखते हैं -

उदाहरण - ए =3 और बी =8.

समाधान -

चरण1 - एमएसबीए =1; एमएसबीबी =3

चरण2 - MSBa !=MSBb, सभी बिट्स को बिट स्थिति 3 से बिट स्थिति 0 के परिणाम के 1 पर सेट करें। परिणाम =(1111)2 =15.

उदाहरण

अब, समस्या को हल करने के लिए कोड देखते हैं,

#include <iostream>
using namespace std;
int FindpositionMSB(long long int n){
   int MSBval = -1;
   while (n) {
      n = n>>1;
      MSBval++;
   }
   return MSBval;
}
long int CalcBitwiseORRaneg( long int a, long int b) {
   long int result = 0;
   int msba = FindpositionMSB(a);
   int msbb = FindpositionMSB(b);
   while (msba == msbb) {
      long int value = (1 << msba);
      result += value;
      a -= value;
      b -= value;
      msba = FindpositionMSB(a);
      msbb = FindpositionMSB(b);
   }
   msba = max(msba, msbb);
   for (int i = msba; i >= 0; i--) {
      long int res_val = (1<<i);
      result += res_val;
   }
   return result;
}
int main() {
   long int a = 3, b = 8;
   cout<<"The bitwise OR (|) of all integers in the range from "<<a<<" to "<<b<<" is "<<CalcBitwiseORRaneg(a, b);
   return 0;
}

आउटपुट

The bitwise OR (|) of all integers in the range from 3 to 8 is 15

  1. C++ में दी गई सीमा से अधिकतम बिटवाइज़ और जोड़ी

    समस्या कथन एक श्रेणी [एल, आर] को देखते हुए, कार्य एक जोड़ी (एक्स, वाई) को ढूंढना है जैसे कि एल ≤ एक्स <वाई ≤ आर और एक्स और वाई सभी संभावित जोड़े में से अधिकतम है, फिर बिटवाइज और मिली जोड़ी को प्रिंट करें । उदाहरण यदि L =1 और R =10 है तो बिटवाइज अधिकतम और मान 8 है जिसे निम्न प्रकार से बनाया जा सकता

  1. बिटवाइज़ या C++ में क्या है?

    बिटवाइज OR ऑपरेटर (|) पहले ऑपरेंड के प्रत्येक बिट की तुलना दूसरे ऑपरेंड के संगत बिट से करता है। यदि या तो बिट 1 है, तो संबंधित परिणाम बिट को 1 पर सेट किया जाता है। अन्यथा, संबंधित परिणाम बिट को 0 पर सेट किया जाता है। बिटवाइज़ समावेशी या ऑपरेटर के दोनों ऑपरेंड अभिन्न प्रकार के होने चाहिए। उदाहरण के ल

  1. C++ में बिटवाइज़ ऑपरेटर्स

    c++ में 3 बिटवाइज़ ऑपरेटर उपलब्ध हैं। ये बिटवाइज़ AND(&), बिटवाइज़ OR(|) और बिटवाइज़ XOR(^) हैं। बिटवाइज AND ऑपरेटर (&) पहले ऑपरेंड के प्रत्येक बिट की तुलना दूसरे ऑपरेंड के संगत बिट से करता है। यदि दोनों बिट्स 1 हैं, तो संबंधित परिणाम बिट को 1 पर सेट किया जाता है। अन्यथा, संबंधित परिणाम बिट 0 पर सेट