3 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
簡(jiǎn)單地說(shuō):在0
告訴它在處理一個(gè)恒定的(而不是一個(gè)標(biāo)識(shí)符/保留字)的解析器。仍然需要一些東西來(lái)指定數(shù)字基數(shù):這x
是一個(gè)任意的選擇。
長(zhǎng)篇:在60年代,流行的編程數(shù)字系統(tǒng)是十進(jìn)制和八進(jìn)制 - 大型機(jī)每字節(jié)有12,24或36位,可以很好地被3 = log2(8)整除。
BCPL語(yǔ)言使用8 1234
八進(jìn)制數(shù)的語(yǔ)法。當(dāng)Ken Thompson從BCPL創(chuàng)建B時(shí),他使用了0
前綴。這很棒,因?yàn)?/p>
一個(gè)整數(shù)常量現(xiàn)在總是由一個(gè)令牌組成,
解析器仍然可以立即告訴它有一個(gè)常數(shù),
解析器可以立即告訴基礎(chǔ)(
0
兩個(gè)堿基都相同),它在數(shù)學(xué)上是理智的(
00005 == 05
),和不需要珍貴的特殊字符(如
#123
)。
當(dāng)從B創(chuàng)建C時(shí),需要十六進(jìn)制數(shù)字(PDP-11具有16位字),并且上述所有點(diǎn)仍然有效。由于其他機(jī)器仍然需要octals,因此0x
被任意選擇(00
可能被排除為尷尬)。
C#是C的后代,因此它繼承了語(yǔ)法。

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
注意:我不知道答案是否正確,但以下僅僅是我的個(gè)人猜測(cè)!
如前所述,數(shù)字前面的0表示它是八進(jìn)制的:
04524 // octal, leading 0
想象一下,需要提出一個(gè)系統(tǒng)來(lái)表示十六進(jìn)制數(shù)字,并注意我們正在C風(fēng)格的環(huán)境中工作。如何以匯編結(jié)束?不幸的是你不能 - 它會(huì)允許你制作有效標(biāo)識(shí)符的標(biāo)記(例如,你可以將變量命名為同一個(gè)東西),這會(huì)產(chǎn)生一些令人討厭的歧義。
8000h // hexFF00h // oops - valid identifier! Hex or a variable or type named FF00h?
出于同樣的原因,你不能帶領(lǐng)角色:
xFF00 // also valid identifier
使用哈希可能會(huì)被拋出,因?yàn)樗c預(yù)處理器沖突:
#define ...#FF00 // invalid preprocessor token?
最后,無(wú)論出于何種原因,他們決定在前導(dǎo)0后面加一個(gè)x來(lái)表示十六進(jìn)制。它是明確的,因?yàn)樗匀灰詳?shù)字字符開(kāi)頭,因此不能是有效的標(biāo)識(shí)符,并且可能基于前導(dǎo)0的八進(jìn)制約定。
0xFF00 // definitely not an identifier!
- 3 回答
- 0 關(guān)注
- 2861 瀏覽
添加回答
舉報(bào)