Onaltılık sayılar neden öneklidir 0x? Ön ekin kullanımını anlıyorum, ancak neden 0xseçildiğinin önemini anlamıyorum .
Onaltılık sayılar neden öneklidir 0x? Ön ekin kullanımını anlıyorum, ancak neden 0xseçildiğinin önemini anlamıyorum .
Yanıtlar:
Kısa hikaye:0 Bir sabit (ve bir tanımlayıcı / saklıdır kelime) aşar ayrıştırıcı söyler. Sayı tabanını belirtmek için hala bir şeye ihtiyaç vardır: xkeyfi bir seçimdir.
Uzun hikaye: 60'lı yıllarda yaygın programlama sayı sistemleri ondalık ve sekizli idi - ana çerçevelerin bayt başına 12, 24 veya 36 biti vardı, bu da 3 = log2 (8) ile güzel bir şekilde bölünebiliyordu.
BCPL dili 8 1234sekizlik sayılar için sözdizimini kullanmıştır . Ken Thompson BCPL'den B yarattığında, 0bunun yerine öneki kullandı. Bu harika çünkü
0her iki bazda da aynıdır),00005 == 05) ve#123).B, B'den yaratıldığında, onaltılık sayılara ihtiyaç duyuldu (PDP-11'in 16 bitlik sözcükleri vardı) ve yukarıdaki tüm noktalar hala geçerliydi. Sekizli diğer makineler için hala gerekli olduğundan 0x, keyfi olarak seçildi ( 00muhtemelen garip olarak kabul edildi).
C #, C'nin soyundan gelir, dolayısıyla sözdizimini devralır.
0xüzerinde 00tercihi / beceriksizlik oldu. 00mevcut kodu kırar. 0010sekizlik olduğu gibi 8, süre 0010onaltılık olurdu 16. Herhangi bir sayıyı ikinci basamak göstergesi olarak kullanamazlardı ( 8veya hariç 9, ve onaltılık sayı ile ilgili herhangi bir önemi yoktur), bu nedenle bir harf zorunludur. Ve bu ya 0hda 0x( H e X idecimal) bırakır . Bu noktadan itibaren gerçekten tercihe döndü.
0Sekizli için bir önek kullanmak yıllar boyunca çok fazla soruna neden oldu. Özellikle İngiltere gibi telefon numaralarının başladığı ülkelerde a 0. Javascript ve diğer birçok dil, bunları sekizlik olarak ayrıştırır ve saklamadan önce sayıyı karıştırır. Eğlenceye eklemek için, bir popüler veritabanı ürünü , sayı bir veya içeriyorsa sessizce ondalık ayrıştırmaya geri dönecektir . 89
Not: Doğru cevabı bilmiyorum, ancak aşağıda sadece benim kişisel spekülasyonum var!
Bir sayıdan önce 0 olarak bahsedildiği gibi, sekizli olduğu anlamına gelir:
04524 // octal, leading 0
Onaltılık sayıları belirtmek için bir sistem bulmanız gerektiğini düşünün ve C tarzı bir ortamda çalıştığımızı unutmayın. H gibi montaj ile bitmeye ne dersiniz? Maalesef yapamazsınız - bazı kötü belirsizlikler için geçerli olan geçerli tanımlayıcılar (örneğin, bir değişkeni aynı şeyi adlandırabilirsiniz) belirteçleri yapmanıza izin verir.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Aynı nedenden ötürü bir karakterle liderlik edemezsiniz:
xFF00 // also valid identifier
Ön işlemciyle çakıştığından muhtemelen bir karma kullanmak dışarı atılmıştır:
#define ...
#FF00 // invalid preprocessor token?
Sonunda, her ne sebeple olursa olsun, onaltılık anlamına gelen 0 başından sonra x koymaya karar verdiler. Hala bir sayı karakteri ile başladığı için belirsiz bir karakterdir, bu nedenle geçerli bir tanımlayıcı olamaz ve muhtemelen önde gelen 0'ın sekizlik kuralına dayandırılır.
0xFF00 // definitely not an identifier!
0xFFAB1234, olarak yazılmalıdır 0FFAB1234h. Gençken Pascal'da satır içi
Sayının başka bir bazdan ziyade onaltılı olduğunu göstermek için bir önektir. C programlama dili derleyiciye bunu söylemek için kullanır.
Misal:
0x6400çevirir 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
derleyici okuduğunda 0x6400, bu sayı yardımıyla onaltılık anladığı 0x vadede. Genellikle (6400) 16 veya (6400) 8 veya her neyse anlayabiliriz .
İçin ikili olurdu:
0b00000001
Umarım bir şekilde yardım etmişimdir.
İyi günler!
x6400? xHala Onaltılık anlaması için kullanılabilir.
Önceki 0, taban 2, 8 veya 16'daki bir sayıyı belirtmek için kullanılır.
Benim düşünceme göre 0x, hex'i belirtmek için seçildi çünkü 'x' hex gibi geliyor.
Sadece benim düşüncem, ama bence mantıklı.
İyi günler!