2012-03-01 16 views
14

मुझे लगता है कि कोई मूल bool प्रकार नहीं है। लोग या तो int या char का उपयोग करते हैं - हालांकि ऐसा लगता है कि intchar से अधिक बार उपयोग किया जा सकता है? क्या ये सच है?सी में बूलियन मूल्य के लिए चार या Int?

मेरा पहला आवेग char का उपयोग करना था क्योंकि यह एक छोटा डेटा प्रकार है, लेकिन मुझे कुछ याद आया है? int बुलियन मूल्यों के लिए बेहतर है, और यदि ऐसा है - क्यों?

+0

शायद क्योंकि 0 इंट के साथ गलत है? अधिक सहज ज्ञान युक्त! – Ali

+0

int का उपयोग किया जाता है क्योंकि यह अनुपयुक्त है, चार इष्टतम डेटा आकार के लिए उपयोग किया जाता है। –

+2

@Ali ए 'char' को' if' कथन में किसी भी 'int' में पदोन्नत किया जाएगा। यह केवल अंतरिक्ष अनुकूलन का मामला है: 'चार' आमतौर पर 'int' से छोटे होते हैं। –

उत्तर

12

_BoolC99 में और है यदि आप stdbool.h शामिल करते हैं।

यदि आपके पास यह नहीं है (एक साधारण आधुनिक कंपाइलर), int का उपयोग करें, यह आमतौर पर सबसे तेज़ प्रकार है। char का उपयोग करने की स्मृति बचत संभवतः नगण्य है।

+0

तो 'int' 'int' से तेज क्यों है? मेरा मतलब है, एक बड़ी डेटाटाइप प्रक्रिया करने के लिए तेज़ है? – thomthom

+2

@thomthom मैंने वास्तव में क्या कहा है कि 'int' तेज है। यह सबसे तेज़ है क्योंकि इसमें सीपीयू प्राकृतिक शब्द का आकार है। यह सीपीयू क्या चाहता है। [यह भयानक उत्तर] देखें (http://stackoverflow.com/a/5069643/226266)। – cnicutar

+0

मैंने सी 99 में 'बूल' देखा होगा - अगर आप नहीं करते थे तो मैं' char' बनाम 'int' के उपयोग की सोच रहा था। बस यह समझने के लिए कि यह सब कैसे काम कर रहा है। लेकिन अगर हम इसमें 'बूल' शामिल करते हैं, तो यह 'int' के साथ प्रदर्शन में कैसा है? क्या यह एक cloaked int है, या एक असली नया डेटाटाइप? – thomthom

3

आप एक यथोचित आधुनिक सी संकलक का उपयोग कर रहे हैं तो आप बस की जरूरत है:

#include <stdbool.h> 

यह आमतौर पर इस तरह के रूप में एक मैक्रो है:

#define bool _Bool 
जो आप का उपयोग करने देता

C99 के अंतर्निहित _Bool टाइप करें जहां आपको bool की आवश्यकता है।

2

एक मूल प्रकार का नाम _Bool (सी 99 से शुरू होता है) है। <stdbool.h> में, वहाँ भी प्रदान करने के लिए एक #definebool उपनाम के रूप में है, अगर आप यह चाहते (भी true और false के लिए #define रों है)।

1

असल में कोई वास्तविक अंतर नहीं है क्योंकि इसका उपयोग करते समय चार को हमेशा int में बढ़ावा दिया जाता है (this देखें)। मैंने कभी भी एक बूल के रूप में इस्तेमाल नहीं किया है, इसलिए मैं एक int का उपयोग करने के लिए जाना होगा।

+0

इसलिए यही कारण है कि' int' तेज है? क्योंकि' char' को 'int' में बदल दिया गया है? – thomthom

+0

@ थॉमथॉम: हां, यही कारण है कि।लेकिन गति लाभ इतना छोटा है कि आप इसे भूल सकते हैं :) – BlackBear

0

आईएसओ -98 99 के संबंध में संबंध, तार्किक और समानता ऑपरेटरों के परिणाम int के प्रकार हैं। true और falsestdbool.h से भी पूर्णांक हैं। यदि आप स्मृति को छोड़ना चाहते हैं - बिट-फ़ील्ड का उपयोग करें।

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