c - 为什么十六进制数的前缀是0x?

标签 c syntax hex

为什么十六进制数的前缀是0x? 我了解前缀的用法,但我不明白为什么选择 0x 的重要性。

最佳答案

短篇小说: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 位字)并且上述所有要点仍然有效。由于其他机器仍需要八进制数,因此任意选择了 0x(00 可能被排除在外)。

C# 是 C 的后代,因此它继承了语法。

关于c - 为什么十六进制数的前缀是0x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2670639/

相关文章:

c - 将字符串写入十六进制转换器

c - 如何将十进制数转换为二进制数,并将二进制数字保存在数组中?

c++ - 是否有 C++ 标准库包装器或 pthread_sigmask 的替代品?

javascript - JavaScript 中的 JSON_encode 语法错误

c - 学习 C 并遇到错误(我认为主要是语法,但我正在学习!)

go - 'key, ok := k.(*dns.A)' 在 Go 中是什么意思?

java - 来自新设备的不同十六进制响应

c++ - 将十六进制转换为十进制 C++

c - 如何在字符串中读取并传递换行符?

c - 加载插件后是否可以将控制权交还给浏览器