C yazılırken, PDP-11'in MACRO-11 montaj dili şu özelliklere sahipti:
MOV #'A, R0 // 8-bit character encoding for 'A' into 16 bit register
Bu tür şeyler, assembly dilinde oldukça yaygındır - düşük 8 bit karakter kodunu tutacaktır, diğer bitler 0'a temizlenir. PDP-11 bile şunlara sahipti:
MOV #"AB, R0 // 16-bit character encoding for 'A' (low byte) and 'B'
Bu, 16 bitlik yazmacın düşük ve yüksek baytlarına iki karakter yüklemek için uygun bir yol sağladı. Daha sonra bunları başka bir yere yazabilir, bazı metin verilerini veya ekran hafızasını güncelleyebilirsiniz.
Bu nedenle, karakterlerin kayıt boyutuna yükseltilmesi fikri oldukça normal ve arzu edilir bir durumdur. Ancak, sabit kodlu işlem kodunun bir parçası olarak değil, ana bellekte aşağıdakileri içeren bir yerden 'A'yı kaydetmeniz gerektiğini varsayalım:
address: value
20: 'X'
21: 'A'
22: 'A'
23: 'X'
24: 0
25: 'A'
26: 'A'
27: 0
28: 'A'
Bu ana bellekten bir kütüğe sadece bir 'A' okumak isterseniz, hangisini okurdunuz?
Bazı CPU'lar yalnızca 16 bitlik bir değeri 16 bitlik bir sicile okumayı doğrudan destekleyebilir; bu, 20 veya 22'de bir okuma, daha sonra 'X' bitlerinin silinmesini gerektirecek ve CPU'nun sonluluğuna bağlı olarak bir veya diğerine bağlı olacaktır. düşük sıralı bayta geçilmesi gerekir.
Bazı CPU'lar belleğe göre ayarlanmış bir okuma gerektirebilir, bu da ilgili en düşük adresin veri boyutunun katı olması gerektiği anlamına gelir: 24 ve 25 adreslerinden okuyabilirsiniz, ancak 27 ve 28'den okuyamazsınız.
Bu nedenle, kayda bir 'A' almak için kod üreten bir derleyici, biraz fazladan bellek harcamayı ve değeri sonlanmaya bağlı olarak 0 'A' veya 'A' 0 olarak kodlamayı ve aynı zamanda doğru şekilde hizalandığından emin olmayı tercih edebilir ( yani tek bir hafıza adresinde değil).
Tahminimce, C'nin bu CPU-merkezli davranışı basitçe, bellek kayıt boyutlarını işgal eden karakter sabitlerini düşünerek, C'nin ortak değerlendirmesini "yüksek seviyeli birleştirici" olarak öne sürerek taşıdıklarıdır.
( Http://www.dmv.net/dec/pdf/macro.pdf sayfa 6-25'teki 6.3.3'e bakın )