सी में बूलियन प्रकार के बारे में
वर्ष १ ९९९ में सी भाषा में एक बूलियन प्रकार को देर से पेश किया गया था। इससे पहले, सी में एक बूलियन प्रकार नहीं था, बल्कि int
सभी बूलियन अभिव्यक्तियों के लिए उपयोग किया जाता था । इसलिए सभी तार्किक ऑपरेटर जैसे कि > == !
आदि int
मूल्य के 1
या वापस लौटाते हैं 0
।
यह घर-निर्मित प्रकारों का उपयोग करने के लिए अनुप्रयोगों के लिए कस्टम था typedef enum { FALSE, TRUE } BOOL;
, जो कि int
-sized प्रकारों को भी उबालता है।
C ++ में बहुत बेहतर और स्पष्ट बूलियन प्रकार bool
था, जो 1 बाइट से बड़ा नहीं था। जबकि सी में बूलियन प्रकार या भाव सबसे खराब स्थिति में 4 बाइट्स के रूप में समाप्त होंगे। C ++ के साथ संगतता के कुछ तरीके C99 मानक के साथ C में पेश किए गए थे। सी को फिर बूलियन प्रकार मिला _Bool
और हेडर भी stdbool.h
।
stdbool.h
C ++ के साथ कुछ अनुकूलता प्रदान करता है। यह हेडर मैक्रो को परिभाषित करता है bool
(C ++ कीवर्ड के समान स्पेलिंग) _Bool
, जो एक प्रकार का होता है, जो एक छोटा पूर्णांक प्रकार होता है, जिसकी संभावना 1 बाइट होती है। इसी तरह, हेडर दो मैक्रोज़ प्रदान करता है true
और false
, सी ++ कीवर्ड के समान वर्तनी, लेकिन पुराने सी कार्यक्रमों के लिए पिछड़े संगतता के साथ । इसलिए true
और false
विस्तार 1
और 0
सी में और उनके प्रकार है int
। ये मैक्रोज़ वास्तव में बूलियन प्रकार के नहीं होते हैं जैसे कि C ++ कीवर्ड होंगे।
इसी तरह, पिछड़े अनुकूलता प्रयोजनों के लिए, C में तार्किक ऑपरेटर अभी भीint
इस दिन तक वापस आते हैं, भले ही आजकल C को एक बूलियन प्रकार मिला हो। C ++ में रहते हुए, तार्किक ऑपरेटर a लौटते हैं bool
। इस प्रकार एक अभिव्यक्ति जैसे कि C में a sizeof(a == b)
का आकार देगी int
, लेकिन bool
C ++ में a का आकार ।
सशर्त संचालक के संबंध में ?:
सशर्त ऑपरेटर ?:
एक अजीब ऑपरेटर है, जो दो-चौथाई है। यह मानना एक सामान्य गलती है कि यह 100% के बराबर है if() { } else {}
। काफी नहीं।
1 और 2 या 3 के ऑपरेंड के मूल्यांकन के बीच एक अनुक्रम बिंदु है। ?:
ऑपरेटर की गारंटी है के लिए एक ही या तो 2 या 3 संकार्य का मूल्यांकन, तो यह संकार्य कि मूल्यांकन नहीं किया गया है में से किसी दुष्प्रभाव पर अमल नहीं कर सकते। जैसे कोड true? func1() : func2()
निष्पादित नहीं होगा func2()
। अब तक सब ठीक है।
हालांकि , एक विशेष नियम है जिसमें कहा गया है कि 2 और 3 के ऑपरेंड को सामान्य रूप से अंकगणितीय रूपांतरणों के साथ एक दूसरे के खिलाफ कथित रूप से प्रचारित और संतुलित होना चाहिए । ( सी में स्पष्ट प्रकार के पदोन्नति नियम यहां बताए गए हैं )। इसका मतलब यह है कि 2 या 3 ओ ऑपरेंड हमेशा कम से कम उतना बड़ा होगा जितना कि ए int
।
तो यह कोई फर्क नहीं पड़ता है true
और सी में false
टाइप का हो सकता int
है क्योंकि अभिव्यक्ति हमेशा कम से कम एक int
मामले का आकार देगी ।
यहां तक कि अगर आप अभिव्यक्ति को फिर से लिखेंगे तो भी आकार वापस आ जाएगा !sizeof(a ? (bool)true : (bool)false)
int
इसका कारण सामान्य अंकगणितीय रूपांतरणों के माध्यम से निहित प्रकार का प्रचार है।
sizeof(true)
औरsizeof(false)
4 भी है: ide.geeksforgeeks.org/O5jvuN