奇思妙想 · 2024年 4月 26日 0

不同语言的不同进制字面量

52 次浏览

常见的是十进制,另外为了方便不同场景下使用,八进制和十六进制可以更好的表达二进制,也被大部分编程语言支持,二进制字面量支持程度差异较大。一般而言,0开头(数值位不止一个0)或者0o/0O为八进制,0x或0X开头为十六进制, 二进制如下:

Swift/Ruby/Perl/Rust/Go/Kotlin默认支持0b开头的二进制表示法,除此之外:

  • C/ObjC没有默认二进制的表示方法,0开头是八进制,0x/0X开头十六进制。
  • C++11之前(不包含),和C/ObjC类似,C++11之后,支持0b或0B二进制表示法。
  • Python 2.6开始支持0b或0B的二进制表示法。
  • C# 7.0 开始支持0b或0B的二进制表示法。
  • Java 7 开始支持0b或0B的二进制表示法。
  • PHP 5.4 开始支持0b或0B的二进制表示法。
  • JS ES6+支持0b或0B开头的二进制表示法。
  • Swift支持2、8、10、16四种进制。0b开头为二进制,0o开头为八进制,0x开头为十六进制。
  • VB十六进制是以&H或&h开头,八进制以&O开头,而非其他语言的0x或0开头。

字面量包含非法字符

一般一个八进制字面量中包含超过8的数字,显然是不合法的。编译器默认的行为就提示错误。

  • GCC对于八进制字面量 019 会提示:error: invalid digit "9" in octal constant

不过也存在特例:

  • JS以0开头(不是0x)的字面量会当做八进制,但是如果数字有超过7且在十进制范围,不会当做错误,而是被二次解析为十进制。
    029是十进制的29.