यहां उत्तरों के अलावा, मैं समझा सकता हूं कि कैसे दो पूरक काम करते हैं।
एक बाइट में 8 बिट होते हैं।
11111111 का मतलब है 255
हालांकि, अगर हम ऐसे ही कहते हैं, हम है कि क्या संख्या सकारात्मक है या नकारात्मक बीच अंतर नहीं कर सकते हैं। इस कारण से, बाईं तरफ बिट हमें यह जानकारी देता है। यदि बाईं तरफ बिट 0 है, तो आप शून्य के शीर्ष पर अन्य बिट्स का मान जोड़ना शुरू कर सकते हैं। यदि बिट 1 है, तो आपको -128 के शीर्ष पर जोड़ना शुरू करना चाहिए। क्योंकि बाईं तरफ बिट सात की शक्ति के लिए दो है।
उदाहरण;
इन उदाहरणों में, बाएं तरफ थोड़ा सा 1 है, इसका मतलब है कि हम -128 के शीर्ष पर अन्य बिट्स के मान जोड़ रहे हैं।
10000000 = -128 (-128 + 0)
10000001 = -127 (-128 + 1)
10000011 = -125 (-128 + 3)
10000111 = -121 (-128 + 7)
एक ही बाइट्स लेकिन इस बार, बाईं तरफ बिट 0. है इसका मतलब है कि, हम के शीर्ष पर जोड़ने के लिए शुरू कर रहे हैं 0.
00000000 = 0 (0 + 0)
00000001 = 1 (0 + 1)
00000011 = 3 (0 + 3)
00000111 = 7 (0 + 7)
अगर हम अब तक ठीक कर रहे हैं, इस सवाल का जवाब करने के लिए अपने प्रश्न, इस नियम के साथ 8 बिट्स के साथ सबसे छोटी संभव संख्या है;
10000000 = -128
सबसे बड़ी संख्या में संभव
011111111 = 127
है यही कारण है कि, रेंज है -128 और 127 के बीच
स्रोत
2017-03-06 10:43:34
[दो के पूरक] (http: //en.wikipedia.org/wiki/Two's_complement) –
यह अन्य पूर्णांक प्रकारों 'लघु', 'int' और' long' के समान है। – starblue
एक बेहतर सवाल यह है कि क्यों जावा बाइट प्रकार 0..255' की सीमा नहीं है? असल में कई लोग इस सवाल से पूछते हैं, ज्यादातर भाषाओं में 'बाइट' प्रकार हस्ताक्षरित है, लेकिन जावा 'बाइट' में भी हस्ताक्षर किए गए हैं, और मैं (और कई अन्य) मानते हैं कि यह एक खराब डिजाइन था जो जावा में एक दिन से बना रहा। जब आप जेएनआई काम कर रहे हों तो समस्याएं हैं, और जब आप कुछ 'बाइट' नाम देते हैं तो मुझे विश्वास करें 0..255! –