c - मापांक का उपयोग करते हुए सी



addition mod (1)

छोटे-एंडियन ints (और ASCII पाठ, और 8-बिट बाइट्स, और अन्य सभी मान्यताओं के लिए कोड की आवश्यकता होती है) के साथ, और कोड में सभी तकनीकी-गलत-इन-आधुनिक-सी सामानों को अनदेखा करते हुए, आपका "आप क्या समझते हैं" अब तक “सही है।

gets(&n) पहले 3 बाइट्स में A, space और B के ASCII मानों को स्टोर करेगा। यह 4 बाइट में एक शून्य टर्मिनेटर को भी स्टोर करेगा। मान B*256*256 + space*256 + A , जहाँ B , space और A , संबंधित ASCII मानों का प्रतिनिधित्व करते हुए n परिणाम के उन बाइट्स में उन ASCII मूल्यों को संग्रहीत करते हैं।

256 मॉड 85 1 है, इसलिए मॉड्यूलर अंकगणित के गुणों के आधार पर,

(B*256*256 + space*256 + A) % 85 = (B + space + A) % 85

संयोग से, 4-बाइट बड़े-एंडियन ints के साथ, हमें मिलता है

(A*256*256*256 + space*256*256 + B*256) % 85 = (B + space + A) % 85

इसलिए जब तक हमारे पास 4-बाइट्स होते हैं, तब तक धीरज मायने नहीं रखता। (बड़ा या छोटा ints एक समस्या हो सकती है; उदाहरण के लिए, 8-बाइट ints के साथ, हमें इस बारे में चिंता करनी होगी कि n के बाइट्स में क्या सेट नहीं होता है।)

अंतरिक्ष ASCII 32 है, और एक अंक चरित्र के लिए ASCII मूल्य 48 + अंक का मान है। (और अंकों के ASCII मानों के बजाय) दर्ज अंकों के संख्यात्मक मूल्यों के रूप में परिभाषित करना, हमारे पास है

(B + space + A) % 85 = (b + 48 + 32 + a + 48) % 85
                     = (a + b + 128) % 85
                     = (a + b + 43) % 85

(B + space + A) % 85 - 43 = (a + b + 43) % 85 - 43
                          = (a + b) % 85
                          = a + b

जहां अंतिम दो समतुल्य इस तथ्य पर भरोसा करते हैं कि a और b 0 से 9 तक मान लेते हैं।

मुझे एक पेचीदा C कोड आया जो A + B प्रिंट करता है, लेकिन मुझे इसे समझने में परेशानी होती है।

इनपुट प्रारूप:

A B

जहाँ A , B 0 और 10 बीच पूर्णांक हैं, वे एक ही स्थान से अलग होते हैं।

कोड:

main( n )
{
    gets( &n );
    printf("%d", n % 85 - 43);
}

यह लघु कोडिंग के लिए अभिप्रेत था, कृपया चेतावनियों का बुरा न मानें।

मैं अब तक क्या समझता हूँ:

gets( &n ) , A, space और B के ASCII मानों को n के निचले तीन बाइट्स में संग्रहीत करता है। उदाहरण के लिए, A = 3 और B = 8 की उपज n = 0x00382033 । दिए गए हालात n को ओवरफ्लो होने से रोकते हैं। लेकिन मुझे समझ नहीं आ रहा है कि कैसे n % 85 - 43 पैदावार A + B

आप इन नंबरों के साथ कैसे आते हैं?





mod