जब C लिखा जा रहा था, तब PDP-11 की MACRO-11 विधानसभा भाषा थी:
MOV #'A, R0 // 8-bit character encoding for 'A' into 16 bit register
असेंबली लैंग्वेज में इस तरह की बात काफी सामान्य है - निम्न 8 बिट्स वर्ण कोड धारण करेंगे, अन्य बिट्स 0. PDP-11 को मंजूरी दे दी गई है:
MOV #"AB, R0 // 16-bit character encoding for 'A' (low byte) and 'B'
इसने दो पात्रों को 16 बिट रजिस्टर के निम्न और उच्च बाइट्स में लोड करने का एक सुविधाजनक तरीका प्रदान किया। फिर आप कुछ पाठ डेटा या स्क्रीन मेमोरी को अपडेट करते हुए, उन्हें कहीं और लिख सकते हैं।
इसलिए, आकार को पंजीकृत करने के लिए प्रचारित किए जाने वाले पात्रों का विचार काफी सामान्य और वांछनीय है। लेकिन, मान लें कि आपको हार्ड-कोडेड ओपकोड के हिस्से के रूप में 'ए' प्राप्त करने की आवश्यकता है, लेकिन मुख्य मेमोरी वाले कहीं से:
address: value
20: 'X'
21: 'A'
22: 'A'
23: 'X'
24: 0
25: 'A'
26: 'A'
27: 0
28: 'A'
यदि आप इस मुख्य मेमोरी से सिर्फ एक 'ए' को एक रजिस्टर में पढ़ना चाहते हैं, तो आप कौन सा पढ़ेंगे?
कुछ सीपीयू केवल 16 बिट मूल्य को 16 बिट रजिस्टर में पढ़ने का सीधे समर्थन कर सकते हैं, जिसका अर्थ है कि 20 या 22 पर एक रीड होगा और फिर 'एक्स' से बिट्स की आवश्यकता होगी, और सीपीयू एक या अन्य के अंत में निर्भर करता है कम क्रम बाइट में स्थानांतरण की आवश्यकता होगी।
कुछ सीपीयू के लिए एक मेमोरी-एलायंस रीड की आवश्यकता हो सकती है, जिसका अर्थ है कि इसमें शामिल सबसे कम एड्रेस एक से अधिक डेटा साइज का होना चाहिए: आप 24 और 25 के पते से पढ़ सकते हैं, लेकिन 27 और 28 को नहीं।
इसलिए, रजिस्टर में 'ए' प्राप्त करने के लिए एक कंपाइलर जनरेटिंग कोड थोड़ी अतिरिक्त मेमोरी बर्बाद करना पसंद कर सकता है और मूल्य को एन्कोडिंग के आधार पर 0 'ए' या 'ए' 0 के रूप में एनकोड कर सकता है, और यह भी सुनिश्चित करता है कि इसे ठीक से संरेखित किया गया है () यानी एक विषम स्मृति पते पर नहीं)।
मेरा अनुमान है कि सी ने केवल सीपीयू-केंद्रित व्यवहार के इस स्तर को आगे बढ़ाया है, चरित्र स्थिरांक को स्मृति के रजिस्टर आकारों पर कब्जा कर लिया है, सी के सामान्य मूल्यांकन को "उच्च स्तरीय कोडांतरक" के रूप में माना है।
(के पेज 6-25 पर 6.3.3 देखें http://www.dmv.net/dec/pdf/macro.pdf )