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

C++ में किसी संख्या के बिट्स को उलटने के लिए एक कुशल C प्रोग्राम लिखें

इस समस्या में, हमें एक अहस्ताक्षरित पूर्णांक n दिया जाता है। हमारा काम एक प्रोग्राम बनाना है जो उस नंबर को लौटाता है जो संख्या के सभी बिट्स को उलट कर उत्पन्न होता है।

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

इनपुट

n = 1

आउटपुट

2147483648

स्पष्टीकरण

binary of 1 is 000...0001, the reverse is 100...0000.

इस समस्या को हल करने के लिए, हम सरल समाधान एक सरल सूत्र का उपयोग करेंगे। हम संख्या के बाइनरी के माध्यम से लूप करेंगे। और संख्या में सेट बिट की स्थिति का पता लगाएं, आइए इसे i कहें। परिणाम की गणना सूत्र का उपयोग करके की जाएगी, ((total_number_of_bits) - 1) - i

इस एल्गोरिथम के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
unsigned int reverseBitNumber(unsigned int num) {
   unsigned int totalNumberOfBits = sizeof(num) * 8;
   unsigned int reverseNumber = 0, temp;
   for (int i = 0; i < totalNumberOfBits; i++){
      if((num & (1 << i)))
         reverseNumber |= (1 << ((totalNumberOfBits - 1) - i));
   }
   return reverseNumber;
}
int main() {
   unsigned int n = 21;
   cout<<"The number is "<<n<<endl;
   cout<<"The number which has reverse bits of the number is :"<<reverseBitNumber(n);
   return 0;
}

आउटपुट

The number is 2
The number which has reverse bits of the number is :2818572288

विधि 2

एक और तरीका है शिफ्टिंग का उपयोग करना, हम संख्या के बिट्स को शून्य होने तक शिफ्ट करेंगे और उन्हें रिवर्स नंबर में शिफ्ट करेंगे और फिर परिणाम प्राप्त करने के लिए बिट्स को शेष संख्या में शिफ्ट करेंगे।

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
unsigned int reverseBitNumber(unsigned int n){
   unsigned int rem_shift = sizeof(n) * 8 - 1;
   unsigned int reverseNubmer = n;
   n >>= 1;
   while(n){
      reverseNubmer <<= 1;
      reverseNubmer |= n & 1;
      n >>= 1;
      rem_shift--;
   }
   reverseNubmer <<= rem_shift;
   return reverseNubmer;
}
int main(){
   unsigned int n = 21;
   cout<<"The number is "<<n<<endl;
   cout<<"The number which has reverse bits of the number is :"<<reverseBitNumber(n);
   return 0;
}

आउटपुट

The number is 21
The number which has reverse bits of the number is :2818572288

  1. सरणी को उलटने के लिए C प्रोग्राम लिखें

    एक सरणी संबंधित वस्तुओं का एक समूह है जो एक सामान्य नाम से संग्रहीत होता है। सिंटैक्स एक सरणी घोषित करने के लिए सिंटैक्स इस प्रकार है - datatype array_name [size]; आरंभीकरण घोषणा के समय एक ऐरे को भी इनिशियलाइज़ किया जा सकता है - int a[5] = { 10,20,30,40,50}; सी में उलटा सरणी हम स्वैपिंग तकनीक क

  1. एक सकारात्मक पूर्णांक संख्या के बिट्स को उलटने के लिए पायथन प्रोग्राम?

    पहले बिन () फ़ंक्शन का उपयोग करके संख्या को बाइनरी में बदलें। फिर द्विआधारी प्रतिनिधित्व के पहले दो वर्णों को छोड़ दें क्योंकि बिन () संख्या के द्विआधारी प्रतिनिधित्व में उपसर्ग के रूप में 0b को जोड़ता है और शेष भाग को उलट देता है। चरित्र से भी और इसे बाएं से दूसरे अंतिम वर्ण तक उलट दें। उलटे बाइनरी

  1. एक संख्या में कुल बिट्स गिनने के लिए एक पायथन प्रोग्राम लिखें?

    पहले हम एक नंबर इनपुट करते हैं फिर इस नंबर को बिन () फ़ंक्शन का उपयोग करके बाइनरी में परिवर्तित करते हैं और फिर आउटपुट स्ट्रिंग के पहले दो अक्षर 0b को हटाते हैं, फिर बाइनरी स्ट्रिंग की लंबाई की गणना करते हैं। उदाहरण Input:200 Output:8 स्पष्टीकरण Binary representation of 200 is 10010000 एल्गोरिद