Onaltılık sayılar neden öneklidir 0x
? Ön ekin kullanımını anlıyorum, ancak neden 0x
seçildiğinin önemini anlamıyorum .
Onaltılık sayılar neden öneklidir 0x
? Ön ekin kullanımını anlıyorum, ancak neden 0x
seç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: x
keyfi 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 1234
sekizlik sayılar için sözdizimini kullanmıştır . Ken Thompson BCPL'den B yarattığında, 0
bunun yerine öneki kullandı. Bu harika çünkü
0
her 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 ( 00
muhtemelen garip olarak kabul edildi).
C #, C'nin soyundan gelir, dolayısıyla sözdizimini devralır.
0x
üzerinde 00
tercihi / beceriksizlik oldu. 00
mevcut kodu kırar. 0010
sekizlik olduğu gibi 8
, süre 0010
onaltılık olurdu 16
. Herhangi bir sayıyı ikinci basamak göstergesi olarak kullanamazlardı ( 8
veya hariç 9
, ve onaltılık sayı ile ilgili herhangi bir önemi yoktur), bu nedenle bir harf zorunludur. Ve bu ya 0h
da 0x
( H e X idecimal) bırakır . Bu noktadan itibaren gerçekten tercihe döndü.
0
Sekizli 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 . 8
9
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
? x
Hala 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!