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
आप इन नंबरों के साथ कैसे आते हैं?