亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么十六進制數字前綴為0x?

為什么十六進制數字前綴為0x?

C
開滿天機 2019-08-15 14:00:49
為什么十六進制數字前綴為0x?為什么十六進制數字前綴為0x?我理解前綴的用法,但我不明白為什么0x選擇的重要性。
查看完整描述

3 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

簡單地說:0告訴它在處理一個恒定的(而不是一個標識符/保留字)的解析器。仍然需要一些東西來指定數字基數:這x是一個任意的選擇。

長篇:在60年代,流行的編程數字系統是十進制和八進制 - 大型機每字節有12,24或36位,可以很好地被3 = log2(8)整除。

BCPL語言使用8 1234八進制數的語法。當Ken Thompson從BCPL創建B時,他使用了0前綴。這很棒,因為

  1. 一個整數常量現在總是由一個令牌組成,

  2. 解析器仍然可以立即告訴它有一個常數,

  3. 解析器可以立即告訴基礎(0兩個堿基都相同),

  4. 它在數學上是理智的(00005 == 05),和

  5. 不需要珍貴的特殊字符(如#123)。

當從B創建C時,需要十六進制數字(PDP-11具有16位字),并且上述所有點仍然有效。由于其他機器仍然需要octals,因此0x被任意選擇(00可能被排除為尷尬)。

C#是C的后代,因此它繼承了語法。


查看完整回答
反對 回復 2019-08-15
?
哆啦的時光機

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!


查看完整回答
反對 回復 2019-08-15
  • 3 回答
  • 0 關注
  • 2911 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號