为什么前缀为0x的hex数字?
为什么前缀为0x
hex数字? 我了解前缀的用法,但我不明白为什么select0x
的意义。
小故事: 0
告诉parsing器它正在处理一个常量(而不是一个标识符/保留字)。 仍然需要指定数字基数: x
是一个任意的select。
长篇小说:在60年代,stream行的编程数字系统是十进制和八进制 – 大型机每个字节有12位,24位或36位,这很好地被3 = log2(8)整除。
BCPL语言对八进制数使用语法8 1234
。 当肯·汤普森从BCPL创buildB时,他使用了0
前缀。 这很好,因为
- 一个整数常量现在总是由一个单一的标记组成,
- parsing器仍然可以立即告诉它有一个常量,
- parsing器可以立即告诉基础(两个基础中的
0
是相同的), - 它在math上是理智的(
00005 == 05
),和 - 不需要宝贵的特殊字符(如
#123
)。
当从B创buildC时,产生对hex数字的需求(PDP-11具有16位字)并且上述所有点仍然有效。 由于其他机器仍然需要使用八进制数,所以任意select0x
( 00
可能被排除为尴尬)。
C#是C的后代,所以它inheritance了语法。
注:我不知道正确的答案,但下面只是我个人的猜测!
正如前面提到的,0之前的数字表示它是八进制的:
04524 // octal, leading 0
想象一下,需要拿出一个系统来表示hex数字,并注意我们正在C风格的环境中工作。 如何结束像组装? 不幸的是,你不能 – 它可以让你制作有效的标识符(例如,你可以命名一个variables同样的东西),这会造成一些令人讨厌的歧义。
8000h // hex FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
出于同样的原因,你不能带着一个angular色:
xFF00 // also valid identifier
使用散列可能被抛出,因为它与预处理器冲突:
#define ... #FF00 // invalid preprocessor token?
最后,无论出于何种原因,他们决定在前导0后面加一个x表示hex。 它是明确的,因为它仍然是一个数字字符开始,所以不能成为一个有效的标识符,可能是基于一个领先的0的八进制规范。
0xFF00 // definitely not an identifier!
简单
这是一个前缀,用于表示数字是以hex表示,而不是其他基数。 C编程语言使用它来告诉编译器。
例如:
0x6400
转换为6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
当编译器读取0x6400
,借助0x项理解数字是hex的。 通常我们可以通过(6400) 16或(6400) 8来理解。
对于二进制它将是
0b00000001
希望以某种方式帮助。
美好的一天 ,
前面的0用于表示以2,8或16为底数的数字。
在我看来,select了0x表示hex,因为“x”听起来像hex。
只是我的意见,但我认为这是有道理的。
美好的一天!