2012-07-20 6 views
16
#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) 
{ 
    int i=-5; 
    while(~(i)) 
    { 
     cout<<i; 
     ++i; 
    } 

} 

आउटपुट -5, -4, -3, -2 है। क्या यह -1 तक मान मुद्रित नहीं करना चाहिए? यह केवल -2 तक क्यों है। और कृपया मुझे 'नहीं' और 'अस्वीकरण' ऑपरेटरों के बीच का अंतर बताएं। जब भी मैं एक प्रोग्राम लिखता हूं तो वे बग के स्रोत थे।नहीं (~) बनाम निगेशन (!)

while(i) 

मुझे पता है कि लूप हालत सकारात्मक और नकारात्मक मैं के लिए सच हो जाएगा छोड़कर 0.

while(!i) vs while(~i) 

क्या की 'i' उपरोक्त दो छोरों मूल्यों निष्पादित हो के लिए?

+0

आप के बीच 'अंतर याद नहीं कर सकते!' और '~', उपयोग '!'। यह लगभग हमेशा आप चाहते हैं। '~' शायद ही कभी जरूरी है। – duskwuff

+1

युक्ति जो आपके लिए उपयोगी हो सकती है, क्योंकि सही उत्तर पहले से ही पोस्ट किया गया था। (मॉड्यूलर) पूर्णांक प्रकारों के लिए, '~ i == -i - 1'। –

+3

ऑपरेटरों के पास वास्तव में सी ++ में नाम होते हैं: '!' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' है। (लोअरकेस, अपरकेस नहीं) – MSalters

उत्तर

24

i-1 जाता है, ~i का मूल्य ~-1 है, या 0, तो while पाश को क्रियान्वित बंद हो जाता है। ! ऑपरेटर काम करता है क्योंकि यह कुछ पूरी तरह से अलग करता है; इसके परिणामस्वरूप 10 मान और 0 अन्य सभी मानों के लिए परिणामस्वरूप। ~ थोड़ा सा नकारात्मकता है।

एक छोटी सी विस्तार में अधिक:

  • ~ एक संख्या में प्रत्येक बिट लेता है और यह टॉगल करता है। तो, उदाहरण के लिए, 10010 बन जाएगा 01101
  • -1 बाइनरी में सभी लोगों को है, जब एक दो के पूरक पूर्णांक पर हस्ताक्षर किए।
  • ~0b…111111110 है।

हालांकि:

  • !01 है, !anythingElse0
  • -10
  • !-1 अभी भी 0

है नहीं है और अगर आप वास्तव में एल करना चाहते हैं i == -1 सहित ओप, while (~i) के बजाय बस while (i) का उपयोग करें।

5

आप के बारे में i == -1 बाहर निकलने हालत जा रहा है सही हैं: अपने पाश

int i=-5; 
while(i != -1) 
{ 
    cout<<i; 
    ++i; 
} 
// i == -1 immediately after the loop 

के बराबर जब इस तरह से, यह स्पष्ट किया जाना चाहिए क्यों -1 मूल्य मुद्रित नहीं है पहले छपा है लिखा है, और उसके बाद ही वृद्धि की जाती है , यही कारण है कि -2 वह अंतिम मूल्य है जिसे आप प्रिंट करते हैं।

दूसरी ओर ! ऑपरेटर, 1 केवल शून्य होने पर ही उत्पादन करेगा। यही कारण है कि लूप -1 प्रिंट करेगा जब ! ऑपरेटर लूप स्थिति में उपयोग किया जाता है।

2

'~' ऑपरेटर है कि: ~ x = -x-1 और जब मैं = -1, फिर ~ i = 0। अगर आप ~ का मूल्य आश्चर्य मैं, तो आप सिर्फ उन्हें प्रिंट कर सकते हैं:

#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) 
{ 
    int i=-5; 
    for (int i = -5; i <= 3; i++) 
    { 
    cout<<i<<" "<<(~i)<<endl; 
    } 
} 

और फिर आप पाएँगे: -5 4 -4 3 -3 2 -2 1 -1 0 0 -1 1 -2 2 -3 3 -4

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