|
|
@ -86,6 +86,97 @@ |
|
|
|
二进制形式(binary) 0b 0B 开头 |
|
|
|
## 浮点数类型值的字面量形式 |
|
|
|
一个浮点数的完整字面量形式包含一个十进制整数部分, 一个小数点 一个十进制小数部分和一个整数指数部分,部分可以省略 |
|
|
|
xEn 表示x乘以10的n次方 xE-n 表示x除以10的n次方 |
|
|
|
go也支持另外啊一种浮点数字面量形式 称为 十六进制浮点数文字表示 在一个十六进制浮点数文字表示中 |
|
|
|
1.和整数的十六进制文字表示一样,浮点数的十六进制文字表示也必须使用0x或0X开头 |
|
|
|
2.和整数的十六进制表示不同的是,字母p或者P必须出现在浮点数的十六进制表示中,其后跟随一个幂指数(底数为2) |
|
|
|
|
|
|
|
浮点类型的零值标准字面量形式为0.0 当然其他的形式表示也是合法的 比如 0. .0 0e0 和 0x0p0 |
|
|
|
|
|
|
|
## 虚部字面形式 |
|
|
|
一个虚部值的字面量形式由一个浮点数字面量或者一个整数字面量和其后跟随一个小写的字母i组成 |
|
|
|
复数零值的标准字面表示为 0.0+0.0i 。 当然 0i 、 .0i 、 0+0i 等表示也是合法的。 |
|
|
|
|
|
|
|
数值字面表示中使用下划线分段来增强可读性 |
|
|
|
下划线 _ 可以出现在整数、浮点数和虚部数字面量中,以用做分段符以增强可读性。 |
|
|
|
但是要注意,在一个数值字面表示中,一个下划线 _ 不能出现在此字面表示的首尾,并且其两侧的字符 |
|
|
|
必须为(相应进制的)数字字符或者进制表示头。 |
|
|
|
|
|
|
|
## rune值的字面量形式 |
|
|
|
上面已经提到, rune 类型是 int32 类型的别名。 因此,rune类型(泛指)是特殊的整数类型。 一个 |
|
|
|
rune值可以用上面已经介绍的整数类型的字面量形式表示。 另一方面,很多各种整数类型的值也可以 |
|
|
|
用本小节介绍的rune字面量形式来表示。 |
|
|
|
在Go中,一个rune值表示一个Unicode码点。 一般说来,我们可以将一个Unicode码点看作是一个 |
|
|
|
Unicode字符。 但是,我们也应该知道,有些Unicode字符由多个Unicode码点组成。 每个英文或中文 |
|
|
|
Unicode字符值含有一个Unicode码点。 |
|
|
|
一个rune字面量由若干包在一对单引号中的字符组成。 包在单引号中的字符序列表示一个Unicode码点 |
|
|
|
值。 rune字面量形式有几个变种,其中最常用的一种变种是将一个rune值对应的Unicode字符直接包在 |
|
|
|
一对单引号中。比如: |
|
|
|
'a' // 一个英文字符 |
|
|
|
'π' |
|
|
|
'众' // 一个中文字符 |
|
|
|
下面这些rune字面量形式的变种和 'a' 是等价的 (字符 a 的Unicode值是97)。 |
|
|
|
'\141' // 141是97的八进制表示 |
|
|
|
'\x61' // 61是97的十六进制表示 |
|
|
|
'\u0061' |
|
|
|
'\U00000061' |
|
|
|
|
|
|
|
注意: \ 之后必须跟随三个八进制数字字符(0-7)表示一个byte值, \x 之后必须跟随两个十六进制数 |
|
|
|
字字符(0-9,a-f和A-F)表示一个byte值, \u 之后必须跟随四个十六进制数字字符表示一个rune值 |
|
|
|
(此rune值的高四位都为0), \U 之后必须跟随八个十六进制数字字符表示一个rune值。 这些八进制 |
|
|
|
和十六进制的数字字符序列表示的整数必须是一个合法的Unicode码点值,否则编译将失败。 |
|
|
|
|
|
|
|
事实上,在日常编程中,这四种rune字面量形式的变种很少用来表示rune值。 它们多用做字符串的双 |
|
|
|
引号字面量形式中的转义字符 |
|
|
|
|
|
|
|
如果一个rune字面量中被单引号包起来的部分含有两个字符, 并且第一个字符是 \ ,第二个字符不 |
|
|
|
是 x 、 u 和 U ,那么这两个字符将被转义为一个特殊字符。 目前支持的转义组合为: |
|
|
|
\a (rune值:0x07) 铃声字符 |
|
|
|
\b (rune值:0x08) 退格字符(backspace) |
|
|
|
\f (rune值:0x0C) 换页符(form feed) |
|
|
|
\n (rune值:0x0A) 换行符(line feed or newline) |
|
|
|
\r (rune值:0x0D) 回车符(carriage return) |
|
|
|
\t (rune值:0x09) 水平制表符(horizontal tab) |
|
|
|
\v (rune值:0x0b) 竖直制表符(vertical tab) |
|
|
|
\\ (rune值:0x5c) 一个反斜杠(backslash) |
|
|
|
\' (rune值:0x27) 一个单引号(single quote) |
|
|
|
|
|
|
|
rune类型的零值常用 '\000' 、 '\x00' 或 '\u0000' 等来表示。 |
|
|
|
|
|
|
|
## 字符串的字面量形式 |
|
|
|
在Go中,字符串值是UTF-8编码,甚至所有的Go源码都必须是UTF-8编码 |
|
|
|
Go字符串字面量形式有两种, 一种是解释型字面表示 双引号格式 另外一种是直白字面表示 反引号格式 |
|
|
|
|
|
|
|
在上面的解释形式(双引号风格)的字符串字面量中,每个 \n 将被转义为一个换行符,每个 \" 将被转 |
|
|
|
义为一个双引号字符。 双引号风格的字符串字面量中支持的转义字符和rune字面量基本一致,除了一 |
|
|
|
个例外:双引号风格的字符串字面量中支持 \" 转义,但不支持 \' 转义;而rune字面量则刚好相反。 |
|
|
|
以 \ 、 \x 、 \u 和 \U 开头的rune字面量(不包括两个单引号)也可以出现在双引号风格的字符串字面量 |
|
|
|
中 |
|
|
|
|
|
|
|
直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号,直白反引号风格的字面表 |
|
|
|
示中不能包含反引号。 为了跨平台兼容性,直白反引号风格的字面表示中的回车符(Unicode码点 |
|
|
|
为 0x0D ) 将被忽略掉。 |
|
|
|
字符串类型的零值在代码里用 "" 或 `` 表示。 |
|
|
|
|
|
|
|
# 基本数值类型字面量的使用范围 |
|
|
|
当一个数值型的字面量用来表示一个整数基本类型的时候,舍入是不允许的 比如1.0可以表示任何基本整数类型的值 |
|
|
|
但是1.01 却不可以 当一个数值型的字面量用来表示一个非整数的基本类型的值时,舍入是允许的 |
|
|
|
|
|
|
|
注意几个溢出的例子: |
|
|
|
字面量 0x10000000000000000 需要65个比特才能表示, 所以在运行时刻,任何基本整数类型都 |
|
|
|
不能精确表示此字面量。 |
|
|
|
在IEEE-754标准中,最大的可以精确表示的float32类型数值 |
|
|
|
为 3.40282346638528859811704183484516925440e+38 ,所以 3.5e38 不能表示任何float32 |
|
|
|
和complex64类型的值。 |
|
|
|
在IEEE-754标准中,最大的可以精确表示的float64类型数值 |
|
|
|
为 1.797693134862315708145274237317043567981e+308 ,因此 2e+308 不能表示任何基本数 |
|
|
|
值类型的值。 |
|
|
|
尽管 0x10000000000000000 可以用来表示float32类型的值,但是它不能被任何float32类型的值 |
|
|
|
所精确表示。上面已经提到了,当使用字面量来表示非整数基本数值类型的时候,精度丢失是允 |
|
|
|
许的(但溢出是不允许的)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|