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 关注
- 2754 浏览
添加回答
举报