जब आप किसी भी गैर-शून्य संख्या को Boolean
पर डालते हैं, तो यह True
का मूल्यांकन करेगा। उदाहरण के लिए:
Dim value As Boolean = CBool(-1) ' True
Dim value1 As Boolean = CBool(1) ' True
Dim value2 As Boolean = CBool(0) ' False
लेकिन, जैसा कि आप का कहना है, किसी भी समय आप डाली एक Boolean
कि एक Integer
को True
पर सेट किया जाता है, यह -1 का मूल्यांकन करेंगे उदाहरण के लिए,:
Dim value As Integer = CInt(CBool(1)) ' -1
इसका कारण यह है क्योंकि -1
हस्ताक्षरित-पूर्णांक मान है जहां इसकी सभी बिट्स 1 के बराबर होती हैं। Boolean
को 16-बिट पूर्णांक के रूप में संग्रहीत किया जाता है, इसलिए सभी को ध्यान में रखते हुए सत्य और झूठे राज्यों के बीच टॉगल करना आसान होता है बिट्स के कम से कम महत्वपूर्ण न केवल 'बिट्स' के बजाय बिट्स का। दूसरे शब्दों में, True
के लिए आदेश 1
होने के लिए, इसे इस तरह संग्रहीत किया जा करने के लिए होगा:
True = 0000000000000001
False = 0000000000000000
लेकिन यह सिर्फ इसे इस तरह स्टोर करने के लिए आसान है:
True = 1111111111111111
False = 0000000000000000
कारण यह आसान है क्योंकि, निम्न स्तर पर:
1111111111111111 = NOT(0000000000000000)
जबकि:
0000000000000001 <> NOT(0000000000000000)
0000000000000001 = NOT(1111111111111110)
उदाहरण के लिए, यदि आप इस व्यवहार इस तरह Int16
वैरिएबल का उपयोग दोहराने कर सकते हैं:
Dim value As Int16 = 0
Dim value2 As Int16 = Not value
Console.WriteLine(value2) ' -1
अगर आप अहस्ताक्षरित पूर्णांकों उपयोग कर रहे थे और अधिक स्पष्ट हो सकता है, तो क्योंकि, True
का मूल्य के बजाय अधिकतम मूल्य है -1। उदाहरण के लिए:
Dim value As UInt16 = CType(True, UInt16) ' 65535
तो, असली सवाल है, तो, क्यों दुनिया में VB.NET 16 बिट का उपयोग करता है एक बिट का मान संग्रहीत है। वास्तविक कारण गति है। हां, यह स्मृति की मात्रा 16 गुणा का उपयोग करता है, लेकिन एक प्रोसेसर 16-बिट बुलियन ऑपरेशन कर सकता है जो सिंगल-बिट बूलियन ऑपरेशंस कर सकता है।
कारण है कि -1
1111111111111111
बजाय 1000000000000001
के रूप में संग्रहीत किया जाता है, जैसा कि आप उम्मीद कर सकते हैं (पहली बिट साइन-सा जा रहा है, और बाकी सामान्य मूल्य जा रहा है), क्योंकि यह two's-पूरक के रूप में संग्रहीत किया जाता है है। दो अंकों के पूरक के रूप में नकारात्मक संख्याओं को संग्रहीत करना मतलब है कि प्रोसेसर के प्रदर्शन के लिए अंकगणितीय संचालन बहुत आसान है।
सच है सभी बिट्स 1 पर सेट हैं। सभी हस्ताक्षरित पूर्णांक प्रकारों के लिए बराबर -1 होता है। –
सी में, झूठी 0 के बराबर है। कोई अन्य मान सत्य है, जिसमें -1 शामिल हैं। ध्यान दें कि -1 बाइनरी 'नहीं' –
का उपयोग करके '0 0 'बराबर नहीं है। – Guy