2013-02-01 30 views
17

मुझे लगता है कि यह एक साधारण सवाल है, लेकिन मैं निम्नलिखित के साथ संघर्ष कर रहा हूं। अबयदि कथन पूर्णांक

int foobar 

if (foobar) 
{ 
// do something. 
} 

, अगर मैं इस बारे में सही कर रहा हूँ, यह बयान सही है जब foobar शून्य नहीं है: उदाहरण में मैं निम्नलिखित बयान है (भाषा सी है)। तो यह काफी समान होना चाहिए जैसे कि (foobar! = 0);

लेकिन क्या होता है यदि फूबर नकारात्मक संख्या बन जाए?

उत्तर

35

नकारात्मक या सकारात्मक। कुछ भी है कि एक 0 नहीं है if

इसके अलावा में एक सही मूल्य, एक नकारात्मक संख्या पर विचार करें: -1

सी में -1 आंतरिक रूप का प्रतिनिधित्व करता है: 0xFFFFFFFF है, जो मामले में, यह एक सकारात्मक संख्या अगर होगा मैं इसे हस्ताक्षरित पूर्णांक में डाल दिया।

लेकिन सी 99 मानक कंपाइलर्स के आगमन के बाद, मेरा सुझाव है कि आप <stdbool.h> का उपयोग करें। अनुमान लगाने का काम बहुत कम कर देता है:

Read here about stdbool.h

+2

नकारात्मक संख्याओं का प्रतिनिधित्व कार्यान्वयन-परिभाषित है। इसके अलावा यह इस सवाल से कोई फर्क नहीं पड़ता, केवल * मूल्य * मायने रखता है, इस पर ध्यान दिए बिना कि इसका प्रतिनिधित्व कैसे किया जाता है। इस संदर्भ में 'int' को 'हस्ताक्षरित int' में परिवर्तित नहीं किया गया है। –

2

ही,

if (foobar) 

foobar नहीं का मतलब शून्य इतना है कि क्या यह सकारात्मक या नकारात्मक बात नहीं है है, यह अभी भी नहीं शून्य

है
0

यदि आपका फ़ॉबर एक नकारात्मक संख्या है (यह शून्य से अभी भी अलग है) तो आपका कथन सत्य वापस होना चाहिए, लेकिन आपको उस तरह के परीक्षण से बचना चाहिए क्योंकि यह उन चरों का परीक्षण करने का सबसे अच्छा अभ्यास नहीं है जिनके पास अलग-अलग 'सत्य' मान हो सकते हैं।

+0

जो वही है जो मैं टालने की कोशिश कर रहा हूं, यह एक अज्ञात स्थिति में आता है। मैंने कोड के इस लाइन को किसी एल्स प्रोग्राम में देखा और फिर उसने मुझे मारा। अगर इसके बजाय उस कथन का उपयोग करें (foobar! = 0); अब मुझे पता है। मेरे प्रश्न को परेशान करने के लिए सभी को धन्यवाद! –