Mengapa angka heksadesimal diawali sebagai 0x
? Saya mengerti penggunaan awalan tetapi saya tidak mengerti pentingnya mengapa 0x
dipilih.
Mengapa angka heksadesimal diawali sebagai 0x
? Saya mengerti penggunaan awalan tetapi saya tidak mengerti pentingnya mengapa 0x
dipilih.
Jawaban:
Cerita pendek: The 0
menceritakan parser itu berurusan dengan konstanta (dan bukan kata pengenal / pendiam). Masih diperlukan sesuatu untuk menentukan basis angka: itu x
adalah pilihan yang sewenang-wenang.
Ceritanya panjang: Pada 60-an, sistem bilangan pemrograman yang lazim adalah desimal dan oktal - mainframe memiliki 12, 24 atau 36 bit per byte, yang dapat dibagi dengan baik oleh 3 = log2 (8).
Bahasa BCPL menggunakan sintaks 8 1234
untuk angka oktal. Ketika Ken Thompson menciptakan B dari BCPL, ia menggunakan 0
awalan sebagai gantinya. Ini bagus karena
0
sama di kedua basis),00005 == 05
), dan#123
).Ketika C dibuat dari B, kebutuhan untuk bilangan heksadesimal muncul (PDP-11 memiliki kata-kata 16-bit) dan semua poin di atas masih valid. Karena oktal masih diperlukan untuk mesin lain, 0x
dipilih secara sewenang-wenang ( 00
mungkin dikecualikan sebagai canggung).
C # adalah turunan dari C, jadi ia mewarisi sintaksis.
0x
tentang 00
preferensi / kecanggungan. 00
akan merusak kode yang ada. 0010
sebagai oktal 8
, sedangkan 0010
sebagai heksidimal akan 16
. Mereka tidak dapat menggunakan angka apa pun sebagai indikator digit kedua (kecuali 8
atau 9
, dan tidak ada yang memiliki signifikansi terkait dengan heksidecimal) sehingga surat adalah suatu keharusan. Dan itu menyisakan 0h
atau 0x
( H e X idecimal). Dari titik ini tampaknya benar-benar kembali ke preferensi.
0
awalan untuk oktal telah menyebabkan begitu banyak masalah selama bertahun-tahun. Khususnya di negara-negara seperti Inggris di mana nomor telepon dimulai dengan a 0
. Javascript dan banyak bahasa lain akan menguraikan ini sebagai oktal, mengacaukan nomor sebelum menyimpan. Untuk menambah kesenangan, satu produk basis data yang populer akan secara diam - diam beralih kembali ke penguraian desimal jika nomor mengandung 8
atau 9
.
Catatan: Saya tidak tahu jawaban yang benar, tetapi di bawah ini hanya spekulasi pribadi saya!
Seperti yang telah disebutkan 0 sebelum angka berarti itu oktal:
04524 // octal, leading 0
Bayangkan perlu membuat sistem untuk menunjukkan angka heksadesimal, dan perhatikan bahwa kami bekerja di lingkungan gaya C. Bagaimana kalau diakhiri dengan h like assembly? Sayangnya Anda tidak bisa - ini akan memungkinkan Anda untuk membuat token yang merupakan pengidentifikasi yang valid (mis. Anda bisa memberi nama variabel dengan hal yang sama) yang akan membuat beberapa ambiguitas buruk.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Anda tidak dapat memimpin dengan karakter karena alasan yang sama:
xFF00 // also valid identifier
Menggunakan hash mungkin dibuang karena bertentangan dengan preprocessor:
#define ...
#FF00 // invalid preprocessor token?
Pada akhirnya, untuk alasan apa pun, mereka memutuskan untuk meletakkan x setelah 0 memimpin untuk menunjukkan heksadesimal. Ini tidak ambigu karena masih dimulai dengan karakter angka sehingga tidak bisa menjadi pengidentifikasi yang valid, dan mungkin didasarkan pada konvensi oktal dari 0 terkemuka.
0xFF00 // definitely not an identifier!
0xFFAB1234
harus ditulis sebagai 0FFAB1234h
. Saya ingat dari
Ini adalah awalan untuk menunjukkan angka dalam heksadesimal daripada di beberapa pangkalan lainnya. Bahasa pemrograman C menggunakannya untuk memberitahu compiler.
Contoh:
0x6400
diterjemahkan menjadi 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Ketika kompiler membaca 0x6400
, Ia mengerti angka itu heksadesimal dengan bantuan istilah 0x . Biasanya kita dapat mengerti dengan (6400) 16 atau (6400) 8 atau apa pun ..
Untuk biner adalah:
0b00000001
Semoga saya telah membantu dalam beberapa cara.
Selamat siang!
x6400
? Itu x
masih bisa digunakan untuk menyimpulkan heksadesimal.
0 sebelumnya digunakan untuk menunjukkan angka dalam basis 2, 8, atau 16.
Menurut pendapat saya, 0x dipilih untuk menunjukkan hex karena 'x' terdengar seperti hex.
Hanya pendapat saya, tapi saya pikir itu masuk akal.
Selamat siang!