3 回答

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

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