टू'स कॉम्प्लीमेंट कैलकुलेटर क्या है?
कंप्यूटर साइन्ड पूर्णांकों (signed integers) को स्टोर करने के लिए टू'स कॉम्प्लीमेंट को मानक तरीके के रूप में इस्तेमाल करते हैं। यह कैलकुलेटर किसी भी दशमलव संख्या को आपकी चुनी हुई बिट चौड़ाई (4, 8, 16 या 32 बिट) के लिए उसके टू'स कॉम्प्लीमेंट बाइनरी रूप में बदल देता है, और साथ ही अनसाइन्ड पैटर्न वैल्यू और उन बिट्स द्वारा दर्शाई गई साइन्ड वैल्यू, दोनों दिखाता है।
इसका इस्तेमाल कैसे करें
कोई दशमलव संख्या डालें — चाहे धनात्मक हो या ऋणात्मक — और बिट चौड़ाई चुनें। यह टूल संख्या को \(2^n\) से मॉड्यूलो करके वह सटीक बिट पैटर्न तैयार करता है जो कोई CPU स्टोर करेगा। यह आपको यह भी बताता है कि वही पैटर्न किस साइन्ड वैल्यू में डिकोड होता है, ताकि आप राउंड-ट्रिप की जाँच कर सकें।
फ़ॉर्मूला समझें
किसी n-बिट फ़ील्ड के लिए, अनसाइन्ड रूप है u = ((x mod 2^n) + 2^n) mod 2^n।
यह ऋणात्मक संख्याओं को घुमाकर (wrap) देता है: 8 बिट में, −5 बन जाता है \(256 - 5 = 251\), जिसका बाइनरी रूप है 11111011। किसी पैटर्न को वापस साइन्ड वैल्यू में डिकोड करने के लिए, सबसे महत्वपूर्ण बिट (MSB) जाँचें: अगर वह 1 है (यानी \(u \geq 2^{n-1}\)), तो वैल्यू है \(u - 2^n\); वरना वह बस \(u\) ही है। निगेट करने का एक समकक्ष तरीका है — सभी बिट्स को उलट दें और एक जोड़ दें: \(\sim x + 1\)।
हल किया हुआ उदाहरण
−5 को 8-बिट टू'स कॉम्प्लीमेंट में बदलें। चरण 1: \(2^8 = 256\)। चरण 2: \(u = ((-5 \bmod 256) + 256) \bmod 256 = 251\)। चरण 3: 251 का बाइनरी रूप है 11111011। चूँकि MSB 1 है, इसलिए साइन्ड वैल्यू है \(251 - 256 = -5\), जो रूपांतरण की पुष्टि करता है।
अक्सर पूछे जाने वाले सवाल
अगर मेरी संख्या बिट चौड़ाई के लिए बहुत बड़ी हो तो? यह \(2^n\) मॉड्यूलो के अनुसार घूम जाती है (ओवरफ़्लो), ठीक वैसे ही जैसे हार्डवेयर करता है। उदाहरण के लिए, 8 बिट में 300 बन जाता है \(300 - 256 = 44\)।
अनसाइन्ड वैल्यू, साइन्ड वैल्यू से अलग क्यों होती है? एक ही बिट्स को दो तरह से पढ़ा जा सकता है। अनसाइन्ड में सभी बिट्स को धनात्मक माना जाता है; साइन्ड में सबसे ऊपर वाले बिट को ऋणात्मक भार (weight) के रूप में लिया जाता है।
क्या यह 64-बिट संभालता है? यह टूल 32-बिट तक की आम चौड़ाइयों को सपोर्ट करता है, ताकि परिणाम सुरक्षित परिशुद्धता (precision) के भीतर रहें।