Eksen, üs üs yerine XOR için neden kullanıldı?


32

Daha önce bu sözdizimsel sorunla karşı karşıya kalan herkes için gerçekten bir sorun değil, ama ^Xet harekatı olarak kabul edilen matematiksel üstelleştirme işleminin yerine, ( ) ( ) işaretinin kullanımından kaynaklanan çılgınca bir karışıklık görüyorum .

Elbette, şerefenin (yanlış) kullanımının açıklandığı ve düzeltildiği pek çok yer var, ancak şeye neden farklı bir anlam verildiğiyle ilgili hiçbir kesin kaynağa rastlamadım .

Bir kolaylık meselesi miydi? Bir kaza? Açıkçası, muhakeme çeşitli diller için farklı olabilir, dolayısıyla herhangi bir konuda bilgi anlayışlı olacaktır.


Yanıtlar:


58

Daha eski öncüller olmasına rağmen, etkili Fransız matematikçi Rene Descartes, genellikle 1637'de yayınlanan Geometrie çalışmasında, matematiksel yazıya ( b ) üstlenilmiş üstellerin tanıtılması için kredilendirildi .

Fortran, üstelleştirme operatörü sağlayan sayısal hesaplamalar için yaygın olarak kullanılan en eski programlama dilidir, 1954 yılına dayanmaktadır. Üst üssü işlem, çift yıldız işaretiyle belirtilir **. O sırada birçok bilgisayarın, bir çizgi karakteri sağlamayan 6 bitlik karakter kodlamaları kullandığı belirtilmelidir ^. Kullanımı **daha sonra Python gibi bir üstelleştirme operasyonu sunan çeşitli yeni programlama dillerinin yaratıcıları tarafından benimsendi.

Şeridi içeren ilk yaygın olarak kabul edilen karakter kümesi , ilk olarak 1963'te standartlaştırılmış olan ^7 bitlik ASCII kodlamasıydı. İlk olarak 1963'te standardize edilmiş olan şapka işaretini kullandım. Farkında olduğum en eski programlama dili, 1964'e kadar uzanan BASIC'dir. IBM , aynı zamanda şapka da içeren EBCDIC karakter kodlamasını kabul etti ^.

C dili, 1972'de ortaya çıktı. Bir üs işletmecisi sağlamaz, bunun yerine, kütüphane işlevleri aracılığıyla üstbilgiyi destekler pow(). Bu nedenle, C'deki üstelik ve diğer C - ailesindeki dilleri (C ++ ve CUDA gibi) bir kenara bırakmak için hiçbir sembolün kullanılması gerekmez.

Öte yandan ve o zamana kadar dilleri programlamak için nadir olan, C bitsel işlemler için semboller sağlar. 7-bit ASCII'de bulunan özel karakterlerin sayısı sınırlıdır ve bazı işlemlerin belirli özel karakterlere “doğal afinitesi” olduğundan, örneğin &VE ve ~NOT için, XOR sembolü için o kadar fazla seçenek yoktu. .

Neden XOR'u ^belirtmeyi seçtikleri konusunda Ritchie veya Kernighan tarafından yayınlanan bir yayınlanmış mantığın farkında değilim ; Ritchie'nin C kısa tarihi bu konuda sessiz. C habercisi için şartname bir bakış dili B , bir XOR operatörünü olmadığını ortaya koymaktadır, ancak zaten dışındaki tüm özel karakterleri kullanılan ^, $, @, #.

[Güncelleme] B’nin yaratıcısı olan B’nin ve C’nin ortak yapımcılarından Ken Thompson’a e-posta gönderdim ^, C’nin XOR operatörü olarak seçmenin gerekçesini sordum ve cevabı burada paylaşmak için izin istedim. Cevabı (okunabilirlik için biraz biçimlendirilmiş):

Gönderen: Ken Thompson
Gönderildi: Perşembe, 29 Eylül 2016 04:50 AM
Kime: Norbert Juffa
Konu: Re: C'deki XOR operatörü olarak şapka seçiminin ardındaki mantık ?

Kalan karakterlerin rastgele bir seçimiydi.

Tekrar yapmak zorunda olsaydım (ki yaptım), xor (^) ve bit tamamlayıcısı (~) için aynı operatörü kullanırdım.

çünkü ^ şimdi daha iyi bilinen operatör, halindeyken, ^, xor ve aynı zamanda tamamlayıcıdır.

Kullanımı ^Eğer işaret ettiğini "matematik" in üs için aslında hangi tarih 1988 için Mathematica olarak cebir sistemleri için böyle Knuth'un TeX gibi 1978'e kadar olan tarihleri, komut satırı arayüzü sistemlerini dizgi ve grafiğe için çok daha sonraki bir tarihte kurulmuş kullanımıdır 1990'ların başında hesap makineleri.

Neden bu ürünler ^üstel kullanım için kullanıldığını benimsemiştir ? Hesap makineleri durumunda, BASIC'in etkisinden şüpheleniyorum. 1980'lerde çok popüler bir ilk programlama diliydi ve diğer yazılım ürünlerine de dahil edildi. Bu nedenle gösterim, hesap makinelerinin birçok alıcısına aşina olmuş olacaktır. Hafızam belirsiz, ancak basit BASIC tercümanları çalıştıran hesap makinelerinin bile olduğuna inanıyorum.


4
Bu güzel bir tarih dersi. Öyleyse asıl soru “Tex'in yazılımı (ve o dönemden başkaları) neden XOR sembolünü kullanmaya karar vermişti? ;)
AxelH 19:16

5
@ EksenH Aslında, değil. TeX, üst simge^ için kullanır . Ve üst simge için "yukarı" bir karakter ve alt simge için "aşağı" bir karakter ( ) kullanmak bana mantıklı geliyor . _
svick

2
@AxelH svick ile ^bir üst okun öne sürüldüğünü, bunun da önceden tanımlanmış bir üslünün geleneksel pozisyonuna işaret ettiğini, yani biraz doğal bir uyum olduğunu ima ettiğini kabul ediyorum . Donald ^Knuth’un, TeX’te üstelleştirme için kullanma kararını sorgulayan bir e-postayı yanıtlayacağına eminim , ancak TAOCP’i tamamlama gibi daha önemli şeyler üzerinde çalışmakla meşgul olduğu düşünülürse, bu adımı atmak istemedim (düşündüm. o).
njuffa

7
En.wikipedia.org/wiki/Caret'e göre Algol 60 üstelleştirme için yukarı dönük bir ok kullandı ve asıl olarak ASCII'nin aynı zamanda şu anda işaret sembolünün bulunduğu kod noktasında bir yukarı ok olduğunu not etti, bu yüzden ikisi açıktı. yaklaşık aynı saatte birbirine eşit.
Periata Breatta 23:16

4
Gerçekten güzel tarihi bir cevap. Sadece bir üs yerine C uygulayan bit işleçlerine olası bir neden eklemek istiyorum: C'nin amacı, programcının işlemcilerin yerel olarak desteklediği öğelerin büyük bir kısmına kolay erişmesini sağlayan düşük seviyeli bir dil olmaktır. Ve CPU'lar her zaman bit manipülasyon talimatları sağlar, ancak üstelik özel talimatlar içeren tek bir CPU bilmiyorum. Bu nedenle, üstelleştirme her zaman bir döngü gerektirir (en azından tamsayı aritmetiğiyle) ve C'de bir dil yapısının arkasındaki bir döngüyü gizleyen tek bir özellik yoktur.
cmaster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.