2015-05-30 4 views
5
unsigned int value = 1860; 
int data = 1300; 
if((data - value) > 0) 
{ 
    printf("Why it is printing this"); 
} 

उत्पादन: यह इसघटाना हस्ताक्षर पूर्णांक

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

unsigned int value = 1860; 
int data = 1300; 
if((data - value) > 0) 
{ 
    Delay(data - value); 
} 

इस भाग में देरी और मेरे काम कभी नहीं ends.That के मूल्य का मतलब है पर रखने कि "डेटा - मूल्य" यही कारण है कि यह अनंत प्रतीक्षा पर चला जाता है है नकारात्मक है। साथ ही यह "अगर" कहां से गुजर रहा है, यह स्थिति "डेटा-वैल्यू"> 0 है। मेरा संदेह अगर हस्ताक्षरित हो जाता है तो हस्ताक्षर किए जाते हैं और "अगर" के माध्यम से गुजरते हैं, तो यह "देरी" फ़ंक्शन के लिए नकारात्मक मूल्य क्यों दे रहा है।

+0

"डेटा-वैल्यू" का मान नकारात्मक नहीं है, यह सिर्फ विपरीत है यानी बहुत बड़ा है। इसे आज़माएं: 'printf ("% u ", डेटा-मान);' – skrtbhtngr

उत्तर

7

int डेटा प्रकार डिफ़ॉल्ट रूप से signed सी/सी ++ में नकारात्मक संख्याओं का समर्थन करता है। जब एक अभिव्यक्ति में signed और unsignedint मान दोनों होते हैं, तो signed int स्वचालित रूप से unsigned int में परिवर्तित हो जाएगा और इसलिए परिणाम 0 से कम नहीं होगा। आप क्या करना चाहते हो सकता है यह है:

unsigned int value = 1860; 
int data = 1300; 
if((signed)(data - value) > 0) 
{ 
    printf("Why it is printing this"); 
} 

यह स्पष्ट रूप से एक signed मूल्य के लिए अभिव्यक्ति का परिणाम परिवर्तित कर देती है कि यह एक नकारात्मक संख्या हो सकती है।

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