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

C++ में पहले तीन और अंतिम तीन बिट्स

समस्या विवरण

इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य दिए गए पूर्णांक मान N के लिए पहले तीन और अंतिम तीन बिट्स के दशमलव रूपांतरण को खोजना है।

उदाहरण

इनपुट: 57
आउटपुट: 7 1

हल का दृष्टिकोण

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

उदाहरण के लिए, संख्या 80 लें।

80 का बाइनरी रूपांतरण 1010000 है।

पहले तीन बिट्स (101) का दशमलव रूपांतरण 5 है।

अंतिम तीन बिट्स (000) का दशमलव समकक्ष 0 है।

इसलिए आउटपुट 5 0 है।

C++ कार्यान्वयन

#include <bits/stdc++.h> 
using namespace std; 

void convertBinToDecimal(int n) {
    int arr[64] = {0};
    int x = 0, index;
    
    // बाइनरी में बदलें (LSB पहले संग्रहीत)
    for (index = 0; n > 0; index++) {
        arr[index] = n % 2;
        n /= 2;
    }
    
    x = (index < 3) ? 3 : index;
    int d = 0, p = 0;
    
    // पहले तीन बिट्स (MSB पक्ष) - सरणी में उच्च इंडेक्स
    for (int i = x - 3; i < x; i++) {
        d += arr[i] * pow(2, p++);
    }
    cout << d << " ";
    
    // अंतिम तीन बिट्स (LSB पक्ष) - सरणी में निम्न इंडेक्स
    d = 0; p = 0;
    for (int i = 0; i < 3; i++) {
        d += arr[i] * pow(2, p++);
    }
    cout << d;
}

int main() {
    int n = 57;
    cout << "संख्या " << n << " के पहले और अंतिम बिट्स का दशमलव रूपांतरण है ";
    convertBinToDecimal(n);
    return 0;
}

आउटपुट

संख्या 57 के पहले और अंतिम बिट्स का दशमलव रूपांतरण है 7 1

व्याख्या (57 के लिए)

57 का बाइनरी: 111001 (6 बिट्स)

  • पहले 3 बिट्स (MSB): 111 = 7
  • अंतिम 3 बिट्स (LSB): 001 = 1

जटिलता विश्लेषण

  • समय जटिलता: O(log N) - बिट्स की संख्या
  • स्पेस जटिलता: O(log N) - बिट सरणी के लिए

बिटवाइज़ ऑपरेशन का उपयोग करके अनुकूलित संस्करण

int last3 = n & 7;           // अंतिम 3 बिट्स (2³ - 1 = 7)
int totalBits = 32 - __builtin_clz(n); // या 64-बिट के लिए 64
int first3 = (n >> (totalBits - 3)) & 7; // पहले 3 बिट्स

यह O(1) समय और O(1) स्पेस में काम करता है।

  1. - C++ में जांचें कि स्ट्रिंग के पहले और अंतिम कैरेक्टर समान हैं या नहीं

    स्ट्रिंग का एक इनपुट दिया गया है और कार्य यह जांचना है कि दी गई स्ट्रिंग के पहले और अंतिम कैरेक्टर समान हैं या नहीं। उदाहरण इनपुट-: study आउटपुट-: समान नहीं    क्योंकि शुरुआती कैरेक्टर s है और स्ट्रिंग का अंतिम कैरेक्टर y है इनपुट-: nitin आउटपुट-: हां, इसके पहले और अंतिम कैरेक्टर समान हैं

  1. - C++ में किलोबाइट्स को बाइट्स और बिट्स में बदलें

    इनपुट के रूप में किलोबाइट्स दिया गया है और कार्य दिए गए इनपुट को बाइट्स और बिट्स की संख्या में बदलना है। बिट − कंप्यूटर में, बिट सबसे छोटी इकाई है जिसे दो पूर्णांक मान 0 और 1 से दर्शाया जाता है और कंप्यूटर में सभी जानकारी इन दो अंकों के अनुक्रम के रूप में संसाधित होती है। N-बिट्स = 2^N पैटर्न,

  1. Excel में पहला और अंतिम नाम कैसे अलग करें Excel में पहला और अंतिम नाम कैसे अलग करें

    आइए एक ऐसी स्थिति मान लें जिसमें आपके पास लोगों के पूरे नामों की सूची है। आप इन नामों को तीन भागों में विभाजित करना चाहते हैं - पहला नाम, मध्य नाम, और अंतिम नाम। यह Microsoft Excel में Delimiter या Separator फ़ंक्शन का उपयोग करके किया जा सकता है। नामों को विभाजित करने का एक अन्य तरीका Formula का उपय