2008-09-19 21 views
21

मेरे पास एक सहकर्मी है जो रखता है कि TRUE को 0 के रूप में परिभाषित किया जाता था और अन्य सभी मान गलत थे। मैं कसम खाता हूं कि मैंने जिस भाषा के साथ काम किया है, यदि आप एक बुलियन के लिए भी मूल्य प्राप्त कर सकते हैं, तो FALSE का मान 0 है। क्या TRUE 0 होता था? यदि हां, तो हमने कब स्विच किया?क्या सच हमेशा शून्य-शून्य मान था?

उत्तर

25

0/गैर 0 बात अपने सहकर्मी के बारे में शायद जब लोगों को सफलता का संकेत दिया गया मान के रूप में संख्यात्मक मान का उपयोग करने के बात कर रहा है उलझन में है , सच नहीं (यानी बैश स्क्रिप्ट और सी/सी ++ की कुछ शैलियों में)।

0 = सफलता का प्रयोग विफलता के कारणों को निर्दिष्ट में एक बहुत अधिक से अधिक परिशुद्धता के लिए अनुमति देता है (उदाहरण के लिए = 1, फ़ाइल गुम 2 = अंग गायब, और इतने पर)।

एक पक्ष नोट के रूप में: रूबी में, केवल झूठी मान शून्य और झूठे हैं। 0 सत्य है, लेकिन अन्य संख्याओं के विपरीत नहीं। 0 सत्य है क्योंकि यह ऑब्जेक्ट 0 का एक उदाहरण है।

8

यदि कुछ और नहीं है, तो बैश शैल अभी भी सत्य के लिए 0 का उपयोग करते हैं, और 1 झूठी के लिए।

+0

मैं इससे पहले भी थोड़ा सा रहा हूं ... –

20

यह 0 का एक परिणाम कोड जो ज्यादातर मामलों में के बाद एक प्रक्रिया समाप्त हो गया है, 0 का एक परिणाम कोड का मतलब के संदर्भ में हो सकता है, "अरे, सब कुछ ठीक है, यहाँ काम कोई समस्या नहीं।"

+3

औचित्य के साथ कि यह कहने के लिए और कुछ भी नहीं है कि यह काम करता है, जबकि यदि यह असफल रहा, तो बहुत सारे गैर-शून्य रिटर्न कोड हैं जो यह इंगित करने के लिए हैं कि यह किस प्रकार की विफलता थी। – slim

+0

आह ... अच्छा पुराना COM – MagicKat

+1

और इसलिए यूनिक्स कमांड 'सत्य' कुछ भी नहीं करता है, लेकिन 0. – Justsalt

0

किसी भी भाषा में मैंने कभी भी काम किया है (70 के दशक के उत्तरार्ध में बेसिक पर वापस जा रहा है), झूठा 0 माना गया है और सत्य शून्य नहीं है।

3

मैं निश्चित नहीं हूं, लेकिन मैं आपको यह बता सकता हूं: सत्य और गलत की अंतर्निहित प्रकृति पर निर्भर चालें त्रुटि के लिए प्रवण हैं क्योंकि इन मानों की परिभाषा भाषा के कार्यान्वयनकर्ता (या, बहुत कम, विनिर्देशक)।

+0

का रिटर्न कोड जारी करता है, अच्छी तरह से ऐसी भाषा में जहां पर सच्चाई की ढीली परिभाषा है, यह कुछ है जिसे आप सीखते हैं न केवल प्यार करने के लिए आवंटित। लेकिन अधिकांश संकलित भाषाओं के प्रकार के सुरक्षा क्षेत्र में, सत्य और झूठी उनकी परिभाषाओं में सख्त हैं। – stephenbayer

+0

हां, लेकिन यह एक संभावित समस्या बन गया है - यहां तक ​​कि एक ही भाषा में - यदि आप कंपाइलर्स, प्लेटफ़ॉर्म, या यहां तक ​​कि बस अपनी भाषा के नवीनतम संशोधन में अपडेट कर रहे हैं। यही कारण है कि जब तक आप अपने मंच के बारे में बहुत निश्चित नहीं हैं या आपको होने की आवश्यकता है, तब तक मैं एग्नोस्टिक को कार्यान्वित नहीं कर रहा हूं। –

0

मुझे TRUE0 याद नहीं है। 0 कुछ ऐसा है जो सी प्रोग्रामर सफलता का संकेत देने के लिए वापस आ जाएगा। इसे TRUE से भ्रमित किया जा सकता है।

यह हमेशा 1 नहीं है। यह -1 या सिर्फ शून्य नहीं हो सकता है।

0

बूलियन प्रकार के बिना निर्मित भाषाओं के लिए, एकमात्र ऐसा सम्मेलन जिसे मैंने देखा है, सत्य को 1 और FALSE के रूप में परिभाषित करना है। उदाहरण के लिए, सी में, if कथन यदि धारावाहिक अभिव्यक्ति का मूल्यांकन करता है तो खंड को निष्पादित करेगा 0.

मैंने एक बार कोडिंग दिशानिर्देश दस्तावेज़ भी देखा जो विशेष रूप से सत्य और गलत को फिर से परिभाषित नहीं करने के लिए कहा गया था। :)

आप एक भाषा है कि बुलियन में बनाया गया है, सी ++ की तरह प्रयोग कर रहे हैं, फिर कीवर्ड true और false भाषा का हिस्सा हैं, और आप कैसे वे वास्तव में लागू किया जाता है पर भरोसा नहीं करना चाहिए।

+0

मेरा मानना ​​है कि कीवर्ड सही और गलत मानकों द्वारा निर्दिष्ट मान हैं, इसलिए आप उन पर भरोसा कर सकते हैं। –

+1

वीबी के पुराने संस्करणों सहित कई भाषाएं, सच/गलत को -1/0 के रूप में परिभाषित करती हैं। ऐसा इसलिए है कि बिटवाई ऑपरेशंस और लॉजिकल ऑपरेशंस एक ही काम करते हैं। – user11318

1

आज भी, कुछ भाषाओं (रूबी, तुतलाना, ...) 0 में सच है क्योंकि शून्य के अलावा सब कुछ सच है। अधिकतर 1 सच है। यही कारण है कि एक आम पकड़ लिया है और इसलिए यह कभी कभी एक अच्छा अभ्यास माना जाता है 0 झूठी जा रहा है पर भरोसा नहीं है, लेकिन एक स्पष्ट परीक्षण करना। जावा आपको यह करने की आवश्यकता है।

इस

int x;  
.... 
x = 0; 
if (x) // might be ambiguous 
{ 
} 

मेक के बजाय

स्पष्ट है

if (0 != x) 
{ 
} 
+0

जावा में तकनीकी रूप से यदि बयान केवल बूलियन अभिव्यक्तियों के लिए मान्य हैं और पूर्णांक बूलियन नहीं डाले जाते हैं। जावा में, सत्य सत्य है और झूठा झूठा है और न ही कोई संख्या है। –

+0

जावा बूलियन विसंगतियों के लिए सबसे अच्छा है –

1

मुझे याद है कि कुछ वीबी प्रोग्रामिंग एक एक्सेस फॉर्म में है जहां ट्रू -1 था।

+0

मुझे लगता है कि कई बेसिक स्वाद शून्य के रूप में शून्य और कुछ भी शून्य के रूप में मूल्यांकन करते हैं, लेकिन निरंतर झूठी को 0 के रूप में परिभाषित करते हैं और निरंतर सत्य -1 (या बाइनरी में सभी 1) के रूप में परिभाषित करते हैं। –

+0

अधिकांश मूलभूत स्वादों में कोई लॉजिकल ऑपरेटर नहीं होते हैं; सभी ऑपरेटर bitwise हैं। इसलिए (नहीं 0) -1 है और तुलना सही -1 और यदि गलत है तो मूल्यांकन करें। – Artelius

0

सी जैसी भाषाओं में कोई बुलियन मूल्य नहीं था इसलिए आपको अपना खुद का परिभाषित करना पड़ा। क्या वे एक गैर मानक बूल ओवरराइड पर काम कर सकते हैं?

2

सी मानक लाइब्रेरी में सिस्टम कॉल आमतौर पर त्रुटि पर +1 और सफलता पर 0 पर वापस आती है। इसके अलावा फॉट्रान की गणना की जाती है अगर कथन (और संभवतः अभी भी करता है) शून्य से बराबर या उससे अधिक की स्थिति के आधार पर तीन पंक्ति संख्याओं में से एक पर कूदता है।

उदाहरण के लिए: अगर (मैं-15) 10,20,10

मैं की हालत के लिए परीक्षण होगा 15 लाइन 20 सच (शून्य करने के लिए मूल्यांकन करता है) करता है, तो और लाइन 10 अन्यथा कूद ==।

सैम कार्यान्वयन विवरण के विशिष्ट ज्ञान पर भरोसा करने की समस्याओं के बारे में सही है।

1

मुझे याद है कि पीएल/1 में कोई बूलियन वर्ग नहीं था। आप थोड़ा सा बना सकते हैं और इसे बुलियन अभिव्यक्ति का परिणाम असाइन कर सकते हैं। फिर, इसका उपयोग करने के लिए, आपको याद रखना था कि 1 झूठा था और 0 सत्य था।

4

सी मानक लाइब्रेरी में कई फ़ंक्शन परिणामस्वरूप 'त्रुटि कोड' पूर्णांक लौटाते हैं। चूंकि नोईआर को 0 के रूप में परिभाषित किया गया है, इसलिए एक त्वरित जांच 'अगर यह 0 है, तो यह ठीक है'। एक ही परंपरा एक यूनिक्स प्रक्रिया 'परिणाम कोड' में ले जाया गया; वह एक पूर्णांक है जिसने किसी दिए गए प्रक्रिया को समाप्त करने के बारे में कुछ जानकारी दी है।

यूनिक्स शैल स्क्रिप्टिंग में, केवल निष्पादित कमांड का परिणाम कोड उपलब्ध है, और टिपिक रूप से संकेत दिया जाता है कि 'सफल' या नहीं, 0 अर्थ सफलता के साथ, और कुछ भी एक विशिष्ट गैर-सफलता की स्थिति है।

उस से, शैल स्क्रिप्ट में सभी टेस्ट-जैसी संरचनाएं सत्य का मतलब 'सफलता' (यानी, 0 का परिणाम कोड) का उपयोग करती हैं, और कुछ और गलत मतलब है।

एक पूरी तरह से अलग विमान पर, डिजिटल सर्किट स्वतंत्र रूप से 'नकारात्मक तर्क' का उपयोग करते हैं। यह है, भले ही 0 वोल्ट को 'बाइनरी 0' और कुछ सकारात्मक मूल्य (आमतौर पर + 5 वी या + 3.3 वी कहा जाता है, लेकिन आजकल + 1.8 वी का उपयोग करना दुर्लभ नहीं है) को 'बाइनरी 1' कहा जाता है, कुछ घटनाएं 'जोरदार' होती हैं किसी दिए गए पिन द्वारा 0 पर जाकर मुझे लगता है कि कुछ शोर प्रतिरोधी फायदे हैं, लेकिन मुझे कारणों के बारे में निश्चित नहीं है।

नोट, हालांकि इस बारे में कुछ भी 'प्राचीन' या कुछ 'स्विचिंग समय' नहीं है। इसके बारे में मुझे जो कुछ भी पता है वह पुराने सम्मेलनों पर आधारित है, लेकिन आज पूरी तरह से वर्तमान और प्रासंगिक हैं।

0

डीओएस और अनुप्रयोगों से बाहर निकलने वाले कोड आमतौर पर 0 का उपयोग सफलता और गैर-शून्य का मतलब किसी प्रकार की विफलता के लिए करते हैं!

डॉस त्रुटि कोड 0-255 हैं और जब 'त्रुटि-रेखा' वाक्यविन्यास का उपयोग करके परीक्षण किया गया है, तो ऊपर उल्लिखित या निर्दिष्ट मूल्य सहित कुछ भी मतलब है, इसलिए निम्नलिखित मिलान 2 और ऊपर के पहले गोटो में, दूसरे और 0 (सफलता) अंतिम एक के लिए!

IF errorlevel 2 goto CRS 
IF errorlevel 1 goto DLR 
IF errorlevel 0 goto STR 
1

यह भ्रमित हो जब पार्टी के सही/गलत वापसी बयान दूसरी तरह के आसपास हैं आसान है:

$ false; echo $? 
1 
$ true; echo $? 
0 
1

अधिकांश भाग के लिए, झूठी 0 के रूप में परिभाषित किया गया है, और सच गैर-शून्य है। कुछ प्रोग्रामिंग भाषाएं 1 का उपयोग करती हैं, कुछ उपयोग -1, और कुछ गैर-शून्य मान का उपयोग करते हैं।

यूनिक्स शैल के लिए हालांकि, वे विपरीत सम्मेलन का उपयोग करते हैं।

यूनिक्स शैल में चलने वाले अधिकांश आदेश वास्तव में छोटे प्रोग्राम होते हैं। वे एक निकास कोड वापस भेजते हैं ताकि आप यह निर्धारित कर सकें कि आदेश सफल था (0 का मान), या यह विफलता के प्रकार के आधार पर किसी कारण (1 या अधिक) के लिए विफल रहा है या नहीं।

यह भीतर श/ksh/bash खोल दुभाषिए में प्रयोग किया जाता है/जबकि/आदेशों की स्थिति की जांच करने के लिए जब तक:

if command 
then 
    # successful 
fi

आदेश सफल होता है (यानी, एक शून्य से बाहर निकलें कोड लौटाता है), कथन के भीतर कोड निष्पादित किया गया है। आमतौर पर, उपयोग किया जाने वाला आदेश [कमांड, जो परीक्षण कमांड के लिए उपनाम है।

2

जनरल नियम:

  1. शेल (डॉस शामिल है) "0" के रूप में "नहीं त्रुटि" का उपयोग करें ... जरूरी सच नहीं।

  2. प्रोग्रामिंग भाषाएं सत्य को इंगित करने के लिए गैर-शून्य का उपयोग करती हैं।

यह कहा गया है कि, यदि आप ऐसी भाषा में हैं जो आपकी गलत स्थिति को परिभाषित करने देता है, इसे परिभाषित करता है और हमेशा स्थिरांक का उपयोग करता है।

1

मजाकिया बात यह है कि यह उस भाषा पर निर्भर करता है जिसके साथ आप काम कर रहे हैं। Lua सही है == प्रदर्शन के लिए शून्य आंतरिक .. सी

1

सी भाषा में, सी ++ से पहले, बूलियन जैसी कोई चीज़ नहीं थी। स्याही परीक्षण परीक्षण द्वारा किया गया था। शून्य का मतलब झूठा था और कोई भी शून्य शून्य मतलब था। तो आप

if (2) { 
    alwaysDoThis(); 
} else { 
    neverDothis(); 
} 

सौभाग्य से सी ++ ने एक समर्पित बूलियन प्रकार की अनुमति दी थी।

+0

कोई भी यह बताना चाहता है कि इसे क्यों वोट दिया गया था? – DJClayworth

+0

क्योंकि यह प्रश्न में दिया गया है। – Hogan

0

मैं के बारे में सुना है और पुराने compilers का इस्तेमाल किया है जहां सच> 0, और झूठे < = 0.

एक कारण आप अगर (सूचक) का उपयोग नहीं करना चाहते हैं या यदि (संख्या) शून्य के लिए जाँच करने के लिए है कि , वे अप्रत्याशित रूप से झूठी मूल्यांकन कर सकते हैं।

इसी तरह, मैंने उन प्रणालियों पर काम किया है जहां न्यूल शून्य नहीं था।

+0

हाहा मजाकिया 0.1 –

12

मैंने बड़ी संख्या में पुराने सी कोड वाली कंपनी में काम किया। साझा हेडर से कुछ सही और गलत के लिए अपने स्वयं के मूल्यों में परिभाषित किया गया है, और कुछ वास्तव में 0 के रूप में सही और गलत के रूप में 1. यह करने के लिए "सच युद्ध" का नेतृत्व किया:

/* like my constants better */ 
#undef TRUE 
#define TRUE 1 

#undef FALSE 
#define FALSE 0 
+1

वोट दें क्योंकि मुझे अतीत में काटा गया है;) – Alaric

0

एसक्यूएल सर्वर डेटाबेस इंजन की स्टोरेज को अनुकूलतम बिट कॉलम यदि तालिका में 8 या कम कॉलम हैं, तो कॉलम 1 बाइट के रूप में संग्रहीत किए जाते हैं। यदि 9 से 16 बिट कॉलम हैं, तो कॉलम 2 बाइट्स के रूप में संग्रहीत होते हैं, और इसी तरह। स्ट्रिंग मान सही और गलत बिट मूल्यों में बदला जा सकता: सही 1 में बदल जाती है और गलत बदल जाती है के लिए 0. बिट में कनवर्ट कर रहा करने के लिए 1.

हर भाषा किसी भी अशून्य मूल्य को बढ़ावा देता है 0 के रूप में सही या गलत हो सकता है तो संख्या उपयोग शब्दों का उपयोग करना बंद करें लॉल या टी और एफ 1 बाइट स्टोरेज

संबंधित मुद्दे