为什么前缀为0x的hex数字?

为什么前缀为0xhex数字? 我了解前缀的用法,但我不明白为什么select0x的意义。

小故事: 0告诉parsing器它正在处理一个常量(而不是一个标识符/保留字)。 仍然需要指定数字基数: x是一个任意的select。

长篇小说:在60年代,stream行的编程数字系统是十进制和八进制 – 大型机每个字节有12位,24位或36位,这很好地被3 = log2(8)整除。

BCPL语言对八进制数使用语法8 1234 。 当肯·汤普森从BCPL创buildB时,他使用了0前缀。 这很好,因为

  1. 一个整数常量现在总是由一个单一的标记组成,
  2. parsing器仍然可以立即告诉它有一个常量,
  3. parsing器可以立即告诉基础(两个基础中的0是相同的),
  4. 它在math上是理智的( 00005 == 05 ),和
  5. 不需要宝贵的特殊字符(如#123 )。

当从B创buildC时,产生对hex数字的需求(PDP-11具有16位字)并且上述所有点仍然有效。 由于其他机器仍然需要使用八进制数,所以任意select0x00可能被排除为尴尬)。

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。

只是我的意见,但我认为这是有道理的。

美好的一天!