दिलचस्प पोस्ट
बाहरी संबंध और आंतरिक संबंध क्या है? ओपनएमपी में समानांतर संचयी (उपसर्ग) राशियाँ: धागे के बीच मूल्यों को संप्रेषण करना उत्पाद तालिका के लिए एक कृत्रिम प्राथमिक कुंजी और एक प्राकृतिक कुंजी के बीच निर्णय करना जावा डोम में स्ट्रिंग के रूप में एक नोड के आंतरिक XML प्राप्त करें संकलन त्रुटि: "stddef.h: ऐसी कोई फ़ाइल या निर्देशिका नहीं" क्यों दस्तावेज़.क्वेरी चयनकर्ता एक असली ऐरे के बजाय एक स्टेटिक नोडलेस्ट वापस लौटाते हैं? ब्लॉब के लिए पार्ट कन्वर्ट करने के लिए कैसे, तो मैं इसे MySQL में स्टोर कर सकते हैं? जेनरिककैचैन नमूना कोड जैसे पासवर्ड सहेजने के लिए चाबी का उपयोग कैसे करें एंड्रॉइड SQLite डीबी कब बंद करें जावा स्टैक ओवरफ़्लो त्रुटि – एक्लिप्स में स्टैक आकार को कैसे बढ़ाएं? एंड्रॉइड में DatePickerDialog पर सीमा निर्धारित करें? पायथन में eval, exec और compile के बीच अंतर क्या है? लूप अनुकूलन के लिए Emacs – एक ऊर्ध्वाधर स्ट्राइक-थ्रू इफेक्ट कैसे बनाएं पहले से चलने वाली प्रक्रिया का उत्पादन कैसे पुनर्निर्देशित करें

Bitwise पूरक (~) ऑपरेटर कैसे काम करता है?

ऐसा क्यों है कि ~ 2 -3 है?

Solutions Collecting From Web of "Bitwise पूरक (~) ऑपरेटर कैसे काम करता है?"

याद रखें कि नकारात्मक संख्याएं दो समकक्षों के पूरक के रूप में जमा की जाती हैं। उदाहरण के तौर पर, दो के पूरक में -2 का प्रतिनिधित्व करना है: (8 बिट्स)

1111 1110 

जिस तरह से आप इसे प्राप्त करते हैं, वह एक संख्या के द्विआधारी प्रतिनिधित्व को ले जाता है, इसके पूरक (सभी बिट्स को हटाने में) और एक को जोड़ने से। दो 0000 0010 के रूप में शुरू होता है, और बिट्स को चालू करके हमें 1111 1101 मिलता है। किसी को जोड़ने से हमें ऊपर के परिणाम मिलते हैं पहला सा एक चिन्ह है, जिसका अर्थ नकारात्मक है।

तो आइए देखें कि हम कैसे ~ 2 = 3 प्राप्त करते हैं:

यहाँ दो फिर से है:

 0000 0010 

बस सभी बिट्स फ्लिप करें और हम प्राप्त करते हैं:

 1111 1101 

खैर, क्या है -3 जो दो पूरक हैं? सकारात्मक 3: 0000 0011 से प्रारंभ करें, सभी बिट्स को 1111 1100 में फ्लिप करें, और एक को नकारात्मक मान (-3), 1111 1101 के रूप में जोड़ें

इसलिए यदि आप 2 में बिट्स को पलटते हैं, तो आपको दो के पूरक का प्रतिनिधित्व -3 मिलता है।

पूरक ऑपरेटर (~) बस फ्लिप बिट्स ये बिट्स की व्याख्या करने के लिए मशीन पर निर्भर है।

~ मूल्य में बिट्स flips

क्यों ~2 है -3 साथ क्या करना है कि कितने नंबरों को बिटवर्ड का प्रतिनिधित्व किया जाता है संख्या दो पूरक के रूप में प्रदर्शित की जाती है

इसलिए, 2 द्विआधारी मान है

 00000010 

और ~ 2 बिट्स को फ़्लिप करता है ताकि मूल्य अब है:

 11111101 

कौन सा, -3 के द्विआधारी प्रतिनिधित्व है

जैसा कि अन्य का उल्लेख किया गया है ~ सिर्फ बिट्स को फ़्लिप किया गया (एक से शून्य और एक को शून्य में बदल दिया गया) और जब से दो के पूरक का उपयोग किया जाता है, तो आपको परिणाम देखने के लिए मिलता है।

जोड़ने के लिए एक बात यह है कि दो पूरक का उपयोग किया जाता है, इसलिए यह है कि नकारात्मक संख्याओं के संचालन सकारात्मक संख्याओं के समान ही होंगे। शून्य के रूप में 3 की संख्या के बारे में सोचो, शून्य प्राप्त करने के लिए 3 को जोड़ा जाना चाहिए और आप देखेंगे कि यह संख्या 1101 , याद रखें कि द्विआधारी अतिरिक्त प्राथमिक स्कूल (दशमलव) के समान है, केवल जब आप 10 की बजाय दो

  1101 + 0011 // 3 = 10000 = 0000 // lose carry bit because integers have a constant number of bits. 

इसलिए 1101 -3 , बिट्स को 0010 जो आपको मिलती है 0010 जो कि दो है।

यह ऑपरेशन एक पूरक है, न कि एक नकारात्मकता।

विचार करें कि ~ 0 = -1, और वहां से काम करते हैं

निषेध के लिए एल्गोरिथ्म, "पूरक, वृद्धि" है

क्या तुम्हें पता था? वहाँ भी "एक पूरक है" जहां व्युत्क्रम संख्या सममित है, और इसमें 0 और एक -0 दोनों हैं

मुझे पता है कि इस प्रश्न का उत्तर बहुत पहले पोस्ट किया गया है, लेकिन मैं इसके लिए अपना जवाब साझा करना चाहता था।

एक के पूरक के लिए एक नंबर खोजने के लिए, पहले अपने द्विआधारी समकक्ष पाते हैं यहां, दशमलव संख्या 2 को 0000 0010 रूप में द्विआधारी रूप में दर्शाया गया है। अब अपने द्विआधारी प्रतिनिधित्व के सभी अंकों में इनवर्टिंग (सभी 1 के 0 में और सभी 1 के 1 में फ्लिप करना) के पूरक को लेते हुए, जिसके परिणामस्वरूप होगा:

 0000 0010 → 1111 1101 

यह दशमलव संख्या 2 के पूरक का है। और पहले बिट के बाद से, यह चिन्ह द्विआधारी संख्या में 1 है, इसका मतलब यह है कि संकेतन संचित संख्या के लिए ऋणात्मक है । (यहाँ, संख्या का उल्लेख 2 नहीं है, लेकिन 2 का पूरक है)

अब, चूंकि संख्याएं 2 के पूरक (एक संख्या के पूरक के साथ एक से एक को लेना) के रूप में जमा की जाती हैं, इसलिए दशमलव में इस बाइनरी संख्या, 1111 1101 को प्रदर्शित करने के लिए, पहले हमें अपने 2 पूरक का पता लगाना होगा, जो निम्न होगा:

 1111 1101 → 0000 0010 + 1 → 0000 0011 

यह 2 पूरक है द्विआधारी संख्या का दशमलव प्रतिनिधित्व, 0000 0011 , 3 । और, चूंकि साइन बिट ऊपर वर्णित है, इसलिए इसका उत्तर -3

संकेत: यदि आप इस प्रक्रिया को सावधानी से पढ़ते हैं, तो आपने देखा होगा कि किसी के पूरक ऑपरेटर के लिए परिणाम वास्तव में है, संख्या (ऑपरेंड – जिस पर यह ऑपरेटर लागू होता है) प्लस एक नकारात्मक संकेत के साथ आप इसे अन्य नंबरों के साथ भी आज़मा सकते हैं

बस ………..

2 के किसी भी संख्या के पूरक के रूप में हम सभी 1s से 0 और इसके विपरीत में हम 1 से जोड़कर गणना कर सकते हैं ..

यहां एन = एन एन परिणाम उत्पन्न करता है – (एन + 1) हमेशा क्योंकि सिस्टम स्टोर डेटा 2 के पूरक के रूप में है जिसका मतलब है कि यह ~ एन को इस तरह से स्टोर करता है।

  ~N = -(~(~N)+1) =-(N+1). 

उदाहरण के लिए::

  N = 10 = 1010 Than ~N = 0101 so ~(~N) = 1010 so ~(~N) +1 = 1011 

अब बात यह है कि जहां से शून्य आता है। मेरी राय मान लीजिए कि हमारे पास 32 बिट रजिस्टर है जो ऑपरेशन में शामिल 2 ^ 31 -1 बिट और एक बिट को आराम करने के लिए है जो पहले की गणना (पूरक) में जो हस्ताक्षर बिट के रूप में संग्रहीत होता है जो 1 आमतौर पर होता है। और हमें ~ 10 = -11 के रूप में परिणाम मिलता है

~ (-11) = 10;

उपरोक्त सच है अगर printf ("% d", ~ 0); हमें परिणाम मिलता है: -1;

लेकिन परिणाम के मुकाबले printf ("% u", ~ 0): 42 9 4 9 672 9 32 बिट मशीन पर।

int a = 4; Println (~ एक); परिणाम होगा: -5

जावा में किसी भी पूर्णांक का '~' 1 के पूरक का प्रतिनिधित्व करता है। उदाहरण के लिए मैं ~ 4 ले रहा हूं, जिसका अर्थ है द्विआधारी प्रतिनिधित्व 0100। पहले, एक पूर्णांक की लंबाई चार बाइट्स है, यानी 4 * 8 (1 बाइट के लिए 8 बिट्स) = 32 इसलिए सिस्टम मेमोरी 4 में 0000 0000 0000 0000 0000 0000 0000 0100 के रूप में प्रदर्शित किया गया है ~ ऑपरेटर 1 के उपरोक्त बाइनरी नंबर पर पूरक

यानी 1111 1111 1111 1111 1111 1111 1111 1011-> 1 सबसे महत्वपूर्ण बिट पूरक है (1 – या +) अगर यह 1 है, तो संकेत है – अगर यह 0 है तो संकेत '+' के रूप में संकेत है। यह हमारा परिणाम नकारात्मक संख्या है, जावा में नकारात्मक संख्या 2 के पूरक रूप में जमा की जाती है, अधिग्रहित परिणाम को हमें 2 के पूरक में परिवर्तित करना होगा (पहले 1 के पूरक को पूरा करें और सिर्फ 1 से 1 के पूरक को जोड़ें)। सभी एक सबसे महत्वपूर्ण बिट 1 को छोड़कर शून्य हो जाएंगे (जो कि हमारे हस्ताक्षर संख्या का प्रतिनिधित्व है, जिसका मतलब है शेष 31 बिट्स 1111 1111 1111 1111 1111 1111 1111 1011 (~ ऑपरेटर का अधिग्रहण परिणाम) 1000 0000 0000 0000 0000 0000 0100 (1 पूरक)

1 (2 पूरक)

1000 0000 0000 0000 0000 0000 0000 0101 अब परिणाम है -5 वीडियो के लिए यह लिंक देखें <[जावा में बिट वार ऑपरेटरों] https://youtu.be/w4pJ4cGWe9Y


बिटवाइस पूरक ऑपरेटर (~) एक अनारी ऑपरेटर है

यह निम्न विधियों के अनुसार काम करता है

पहले यह दी गई दशमलव संख्या को उसके संबंधित द्विआधारी मान में परिवर्तित कर देता है। यह 2 के मामले में है, यह पहली बार 2 से 0000 0010 (8 बिट बाइनरी नंबर) को परिवर्तित करता है।

फिर यह 1 में सभी 1 में परिवर्तित हो जाता है, और सभी शून्य को 1 में बदल देता है, फिर संख्या 1111 1101 हो जाएगी।

यह 2 के पूरक का प्रतिनिधित्व -3 है।

पूरक का उपयोग करते हुए अहस्ताक्षरित मूल्य को खोजने के लिए, अर्थात् केवल 1111 1101 से दशमलव (= 42 9 4 9 672 9 3) को परिवर्तित करने के लिए हम मुद्रण के दौरान बस% u का उपयोग कर सकते हैं

मुझे लगता है कि ज्यादातर लोगों के लिए भ्रम का हिस्सा दशमलव संख्या और हस्ताक्षरित द्विआधारी संख्या के अंतर से आता है, इसलिए इसे पहले स्पष्ट करें:

मानव दशमलव दुनिया के लिए: 1 का अर्थ है 1, -01 का मतलब -1, कंप्यूटर की द्विआधारी दुनिया के लिए: 101 का मतलब 5 यदि यह अहस्ताक्षरित नहीं है। 101 का अर्थ है (-4 + 1) अगर हस्ताक्षर किए गए हैं, तो हस्ताक्षर किए गए अंक x स्थान पर हैं | एक्स

तो 2 के फ्लिप बीट = ~ 2 = ~ (010) = 101 = -4 + 1 = -3 पर हस्ताक्षर किये गए परिणाम (101 = -3) को मिश्रण करने से और अनचाहे परिणाम (101 = 5)

पहले हमें दिए गए अंक को अपने द्विआधारी अंकों में विभाजित करना होगा और फिर अंतिम बाइनरी अंक में जोड़कर इसे रिवर्स करना होगा। इस निष्पादन के बाद हमें पिछले अंक को विपरीत चिन्ह देना होगा, जिसे हम समझदार पा रहे हैं ~ 2 = -3 स्पष्टीकरण : 2 एस बाइनरी फॉर्म 00000010 है 11111101 में परिवर्तन यह है कि वह पूरक है, फिर 00000010 + 1 = 00000011 का अनुपालन है जो तीनों का बाइनरी रूप है और साथ -साइन Ie, -3

बिट-वार ऑपरेटर एक अनारी ऑपरेटर है जो मेरे अनुभव और ज्ञान के अनुसार साइन और परिमाण विधि पर काम करता है।

उदाहरण के लिए ~ 2 का परिणाम -3 होगा

इसका कारण यह है कि बिट-वार ऑपरेटर पहले नंबर पर हस्ताक्षर और परिमाण में प्रतिनिधित्व करेंगे जो 0000 0010 (8 बिट ऑपरेटर) है जहां एमएसबी हस्ताक्षर बिट है।

फिर बाद में यह नकारात्मक संख्या 2 ले लेगा जो 2 है।

-2 को हस्ताक्षर और परिमाण में 1000 0010 (8 बिट ऑपरेटर) के रूप में दर्शाया गया है।

बाद में यह एलएसबी (1000 0010 + 1) को एक 1 जोड़ता है जो आपको 1000 0011 देता है

जो -3 है

जावास्क्रिप्ट टिल्ड (~) किसी के पूरक के लिए दिए गए मान को coerces – सभी बिट्स उल्टे हैं यह सब टिल्ड करता है यह विचारधारा पर हस्ताक्षर नहीं है यह किसी भी मात्रा को न तो जोड़ता है न ही घटा देता है

 0 -> 1 1 -> 0 ...in every bit position [0...integer nbr of bits - 1] 

जावास्क्रिप्ट की तरह उच्च-स्तरीय भाषाओं का उपयोग करते हुए मानक डेस्कटॉप प्रोसेसर पर, BASE10 पर हस्ताक्षर किए अंकगणित सबसे आम है, लेकिन ध्यान रखें, यह एकमात्र तरह का नहीं है। सीपीयू स्तर पर बिट्स कई कारकों के आधार पर व्याख्या के अधीन हैं। 'कोड' स्तर पर, इस मामले में जावास्क्रिप्ट, उन्हें परिभाषा द्वारा 32-बिट हस्ताक्षरित पूर्णांक के रूप में व्याख्या की जाती है (चलो इस से बाहर निकलते हैं)। इसे क्वांटम के रूप में सोचो, उन 32 बिट्स एक ही बार में कई संभावित मानों का प्रतिनिधित्व करते हैं। यह उन कनवर्टिंग लेंस पर पूरी तरह निर्भर करता है, जिन्हें आप उन्हें देख रहे हैं।

 JavaScript Tilde operation (1's complement) BASE2 lens ~0001 -> 1110 - end result of ~ bitwise operation BASE10 Signed lens (typical JS implementation) ~1 -> -2 BASE10 Unsigned lens ~1 -> 14 

उपर्युक्त सभी एक ही समय में सत्य हैं।