常见的是十进制,另外为了方便不同场景下使用,八进制和十六进制可以更好的表达二进制,也被大部分编程语言支持,二进制字面量支持程度差异较大。一般而言,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.
