Di mana dan kapan konvensi `0x` untuk literal heksadesimal berasal?

Aug 16 2020

Pada awal 1980-an, C digunakan 0xsebagai awalan untuk menunjukkan literal integer yang diekspresikan dalam heksadesimal, misalnya 0xCAFE. Ini tidak ada di B pada tahun 1972, meskipun B mendukung literal bilangan bulat oktal melalui 0prefiks.

Di mana dan kapan 0xawalan ini pertama kali digunakan?

Jawaban

36 Raffzahn Aug 16 2020 at 13:28

Ini tidak ada di B pada tahun 1972, meskipun B mendukung literal bilangan bulat oktal melalui awalan 0.

Benar, tetapi pendahulu B, BCPL, memiliki notasi #untuk oktal dan #xuntuk heksadesimal. Jadi idenya 'melompati' satu generasi.


Sejarah C adalah salah satu fitur penghapus yang akan ditambahkan nanti lagi ... untuk lebih baik atau lebih buruk.

  • CPL (Combined Programming Language) dikembangkan di Cambridge dan London sebagai Algol yang disederhanakan untuk pemrograman sistem (* 1). Ini diimplementasikan pada 1965/66 untuk EDSAC 2, Atlas dan IBM 7094.

  • BCPL (Basic CPL) adalah, seperti namanya, versi CPL yang disederhanakan, pertama kali diterapkan pada tahun 1967 pada IBM 7094 (* 2).

  • B sekali lagi adalah BCPL yang disederhanakan (* 3, * 4), dibuat agar sesuai dengan PDP-7 pada tahun 1969.

  • C dikembangkan melalui NB (New B) untuk PDP-11 pada tahun 1972ff, menambahkan fitur (kembali).

CPL digunakan #untuk menunjukkan konstanta oktal. Tidak ada kebutuhan nyata untuk hex, karena semua mesin yang diimplementasikan memiliki ukuran kata yang dapat dibagi 3 dan menggunakan karakter 6 bit untuk output.

BCPL berkembang dalam waktu (cukup singkat). Sementara dari awal #digunakan untuk menandai bilangan oktal, ia segera dilengkapi dengan #bbiner #xuntuk heksadesimal dan bahkan #ooktal. Penambahan ini adalah waktu dan penerapan yang spesifik, tetapi setidaknya #xmenjadi standar yang cepat.

B turun #xlagi dengan seluruh #notasi (* 5) mendukung nol sebelumnya, menyederhanakan parser. Karena PDP-7 adalah kelipatan mesin berukuran 3 kata, oktal adalah satu-satunya notasi khusus mesin yang diperlukan (* 6,7).

C pada gilirannya dikembangkan untuk PDP-11, di mana, sebagai mesin 16 bit, banyak konstanta yang bergantung pada mesin datang secara alami dalam hex - belum lagi 8 bit byte dan segmentasi ASCII dalam kelompok 32. Sekarang memperkenalkan kembali notasi hex telah dipertimbangkan berguna - kali ini tetap dengan gagasan nol sebelumnya.


* 1 - CPL sangat menarik untuk dilihat. Meskipun sudah memiliki banyak dasar C, seperti pointer ke kata-kata sebagai elemen dasar, ini juga berisi beberapa fitur yang tampaknya tidak biasa mulai saat ini. Misalnya a = bctidak menetapkan variabel bc ke a, tetapi hasil kali b kali c. Pengenal multi-karakter harus dimulai dengan huruf kapital. Ini mungkin juga asal mula kasus unta yang paling disukai.

* 2 - Dan Model 35 TTY, yang, pada saat itu, tidak memiliki kurung kurawal atau persegi, sehingga digraf ditambahkan. Mirip tidak ada garis miring, begitu *juga digunakan untuk karakter khusus dalam string.

* 3 - Ditambah beberapa tombol lucu. Memiliki Algol +:=sebagai augmented assignment, sehingga menggunakan CPL dan BCPL =+, sedangkan B beralih kembali ke +=.

* 4 - Mungkin beberapa PL / saya menambahkan.

* 5 - Ini juga turun #sebagai bagian dari operator perbandingan

* 6 - Perlu diingat bahwa byte 8 bit dan notasi hex yang sesuai hanya diperkenalkan beberapa saat sebelumnya dengan IBM / 360.

* 7 - Catatan samping yang menarik mungkin adalah bahwa CTC juga digunakan sebagai nol sebelumnya untuk konstanta oktal di Assembler mereka untuk 1970 Datapoint 2200 . Jadi meskipun saya tidak mengetahui adanya hubungan langsung, cukup menarik bahwa mereka menemukan solusi yang sama pada saat yang sama seperti yang dilakukan Thompson.