c - संख्याओं की तुलना में घबराहट(सी में)?




comparison int (6)

मैं सी में प्रोग्रामिंग से भी परिचित नहीं हूं (मैंने केवल कुछ छोटी परियोजनाओं को भाषा में ही किया है), हालांकि, मेरे प्रोफेसर ने आज के व्यवहार के बारे में कुछ कहा, जिससे मुझे थोड़ा उलझन में छोड़ दिया गया।

उसने क्या कहा था कि यह कोड कभी-कभी कुछ भी नहीं छापता है (मैं बोर्ड पर वास्तव में क्या लिखा था, मेरा मानना ​​है कि सी के लिए यह छद्मोकोड है क्योंकि "प्रिंट" सी में नहीं है):

    int a = ___________;
    int b = ___________;

    if (a < b)
   print (“<“);
    if (a > b)
   print (“>”);
    if (a==b)
   print(“=”);

असल में, ऐसी कुछ चीजें हैं जो आप उन चर चर में स्टोर कर सकते हैं, जहां इनमें से कोई भी परिस्थिति नहीं मिलेगी ( _ _ _ _ वास्तविक कोड नहीं है, यह सिर्फ यह दर्शाता है कि कुछ वहाँ है)। यह जरूरी नहीं कि कुछ रिक्त स्थान भरने की आवश्यकता होती है जो उन रिक्तताओं को भरती है ... यह दुनिया में कुछ भी हो सकता है (और इस कोड से पहले हुआ सामान हो सकता है)

वह क्या है जो उन खाली जगहों को भर सकता है और कोई परिणाम नहीं देगा, और क्यों?

पी एस - यह एक अतिप्रवाह, अपरिभाषित व्यवहार, सीमा से बाहर, या पसंद के कुछ के साथ क्या कुछ था

pps - मेरे इस प्रोफेसर पर विश्वास करने में गंभीर समस्या है I वह प्रोग्रामिंग के बारे में अधिक जानकार है जिसे मैं कभी भी संपर्क में आया हूं। मुझे यकीन है कि ऐसा कुछ मामला है जहां यह सच है।


ps - यह एक अतिप्रवाह के साथ कुछ किया हो सकता था?

मुझे लगता है कि यह आपके प्रोफेसर का मतलब है:

#include <stdio.h>
#include <stdint.h>

int main(int argc, char** argv)
{
    uint8_t a = 100;
    uint8_t b = 200;

    a = a + b; /* a = 300 in your head. This overflows, so 300-256=44 */

    if ( a > b )
    {
        printf("%u > %u", a, b);
    }
    else if ( a < b )
    {
        printf("%u < %u", a, b);
    }
    else
    {
        printf("%u == %u", a, b);
    }

    return 0;
}

विशेष रूप से, मैं एक निश्चित चौड़ाई 8-बिट हस्ताक्षरित पूर्णांक का उपयोग कर रहा हूँ, जो अधिकतम 8 बिट्स (आश्चर्य) को पकड़ सकता है जो कि 256 को सबसे बड़ा संभव पूर्णांक के रूप में दर्शाता है आप इस फ़ील्ड को इस आकार में जोड़कर इस क्षेत्र को ओवरफ्लू कर सकते हैं जो इस आकार में प्रदर्शित नहीं किया जा सकता है, जिस स्थिति में आप जो छोड़ रहे हैं वह लपेट-आस-पास प्रभाव है

अगर तुलना तर्क में कोई वास्तविक अस्पष्टता नहीं है, क्योंकि यह वास्तव में प्रोसेसर का हिस्सा है (यदि तुलना में एक / जंप अनुक्रम संयोजन का अनुवाद होता है)। समस्या यह है कि आप इसे क्रमादेशित कर सकते हैं, यह उचित रूप से काम करने की अपेक्षा करता है, यह नहीं कि एक कंप्यूटर पर उस संख्या के प्रतिनिधित्व का निर्धारण किया गया है, सभी ने निरूपित अभ्यावेदन किए हैं। मैं उन रजिस्टरों में डाल सकता हूं जो संभवत: "कम, अधिक से अधिक या समान" के सभी भाग से बच सकता था।

नोट मैंने सीएएम-सीएएम द्वारा निर्धारित निश्चित आकार के पूर्णांक के लिए स्पष्टता और छोटे संख्या आकार का उपयोग किया है ताकि हम इसे हमारे सिर में कर सकें।


Int के लिए यह सच नहीं है, क्योंकि उनके पास "विशेष" मान नहीं है


यदि आपके पास एक के पूरक में इंट नंबर के साथ एक वास्तुकला है, तो दो शून्य हैं: सभी में से एक को 0 पर सेट और सभी बिट के साथ 1 से सेट, उर्फ ​​पॉजिटिव और नकारात्मक शून्य। दोनों शून्य को समान की तुलना करना चाहिए, लेकिन एक छोटी गाड़ी संकलक ऐसा नहीं देख सकता ;-)


यह देखते हुए कि "इस कोड से पहले हुआ सामान हो सकता है ..."

#include <stdio.h>
#include <math.h>

int main(void)
{

#define int float

    int a = nanf(NULL);
    int b = nanf(NULL);

    if (a < b)
       printf("<\n");
    if (a > b)
       printf(">\n");
    if (a == b)
       printf("==\n");

    return 0;
}

हो सकता है कि print की परिभाषा है:

void
print(const char*) {    
}

a = 0, b = 5 / a : divide by zero




ambiguity