2010-10-19 12 views
5

वीबी 6 में, एक पूर्णांक में True को जोड़कर मूल्य -1 उत्पन्न होता है।क्यों 1 है वीर 6 में एक पूर्णांक के लिए सही समन्वय का परिणाम?

ऐसा क्यों है? इसके पीछे तर्क क्या है?

अन्य प्रोग्रामिंग भाषाओं (सी/सी ++, जावा, पर्ल, पायथन, आदि) में, सत्य पूर्ण हो जाता है जब पूर्णांक में घुमाया जाता है। बुलियन बीजगणित में, मान 1 का उपयोग सत्य/चालू करने के लिए किया जाता है। वीबी 6 अलग-अलग क्यों करता है?

मुझे इस तथ्य में एक निश्चित सुरुचिपूर्ण समरूपता दिखाई देती है कि थोड़ा सा -1 (सत्य) -1 (गलत) नहीं मिलेगा (और इसके विपरीत -1 की प्रस्तुति two's complement में सभी 1s होने के कारण), लेकिन मैं इस पहचान के किसी भी व्यावहारिक लाभ के बारे में नहीं सोच सकता।

मैं केवल जिज्ञासा से पूछ रहा हूं, वैसे ही - यह कुछ ऐसा था जो मुझे पहली बार वीबी 6 सीखा, और मैं तब से सोच रहा था।

उत्तर

7

तुम बहुत कारण के करीब आ गया ... एरिक Lippert reveals the horrible, horrible truth:

क्या हो रहा है कि VBScript तार्किक नहीं है। वीबीस्क्रिप्ट bitwise है। सभी तथाकथित तार्किक ऑपरेटरों संख्याओं पर काम करते हैं, बूलियन मूल्यों पर नहीं! नहीं, और, या, एक्सओआर, ईवीवी और आईपी सभी अपने तर्कों को चार-बाइट पूर्णांक में परिवर्तित करते हैं, पूर्णांक में बिट्स की प्रत्येक जोड़ी पर लॉजिकल ऑपरेशन करते हैं, और परिणाम लौटाते हैं। यदि सही है -1 और झूठा 0 है तो सब कुछ काम करता है, क्योंकि -1 के सभी बिट्स चालू हो गए हैं और 0 के सभी बिट्स बंद हो गए हैं।

(Chris Smith notes रूप में, यह एक लंबे समय के लिए बुनियादी के विभिन्न जायके का सच कर दिया गया है ...)

ध्यान दें कि VB.NET में, तार्किक ऑपरेटरों (जो है, ऑपरेटरों कि संचालित केवल बूलियन डेटाटाइप पर) पेश किए गए थे, लेकिन अगर मौजूदा इंटीग्रल प्रकार खिलाए तो मौजूदा ऑपरेटर अभी भी खुशी से बिटवाई ऑपरेशन करेंगे। सी ++ और वीबी के बीच चलते समय यह मेरे लिए निराशा का लगातार स्रोत रहा है ...

+0

मुझे पता है :) मुझे वीबी पसंद नहीं है;) – Onkelborg

+0

दिलचस्प! लिंक के लिए धन्यवाद। मुझे पता था कि तार्किक ऑपरेटरों ने शॉर्ट सर्किट नहीं किया और पूर्णांक के लिए थोड़ा सा काम किया, लेकिन मुझे नहीं पता था कि वे बूलियन मूल्यों के लिए भी _only_ bitwise थे। और @ ओन्केल्बोर्ग, मुझे वीबी पसंद नहीं है, मैं इस विसंगति के लिए उत्सुक था ;-) – Cameron

+1

अच्छा :) मानव जाति के लिए थर की आशा :) – Onkelborg

2

यह सच है केवल बाइनरी लोगों के रूप में (11111111 आदि ..) केवल शून्य के रूप में झूठी (00000 आदि ..)

डेटाप्रकार पूर्णांक हस्ताक्षरित किया गया है, MSB मतलब यह है कि जब शून्य हमें बताता है कि मूल्य है प्रतिनिधित्व किया है, सकारात्मक, और जब वह नकारात्मक है। सबसे बड़े, संभावित, सकारात्मक संख्या को एक से अधिक प्रवाह करने का प्रयास करें, फिर यह सबसे बड़ा, नकारात्मक संख्या संभवतः "रोल ओवर" हो जाएगा।

दशमलव -1 को केवल एक के रूप में दर्शाया गया है। वहां आपके पास है :)

4

यह माइक्रोसॉफ्ट मूल में लंबे समय से GW-BASIC कम से कम सच है। मुझे लगता है कि ऐसा इसलिए है क्योंकि उन दिनों में कोई वास्तविक बूलियन प्रकार नहीं था या एक अलग तार्किक नोट ऑपरेटर नहीं था, इसलिए पूर्णांक नहीं ऑपरेटर को सत्य और गलत दोनों के साथ काम करने के लिए, उन्होंने मान 0 और -1 का उपयोग किया। सकारात्मक 1 काम नहीं करता क्योंकि 1 नहीं शून्य नहीं है।