mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:06:41 +08:00
04.5.md
This commit is contained in:
@@ -75,8 +75,92 @@ Go 语言中包含以下逻辑运算符:
|
|||||||
|
|
||||||
对于布尔值的好的命名能够很好地提升代码的可读性,例如以 `is` 或者 `Is` 开头的 `isSorted`、`isFinished`、`isVisivle`,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的 `unicode.IsDigit(ch)`(第 4.5.5 节)。
|
对于布尔值的好的命名能够很好地提升代码的可读性,例如以 `is` 或者 `Is` 开头的 `isSorted`、`isFinished`、`isVisivle`,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的 `unicode.IsDigit(ch)`(第 4.5.5 节)。
|
||||||
|
|
||||||
|
##4.5.2 数字类型
|
||||||
|
###4.5.2.1 整型 int 和浮点型 float
|
||||||
|
Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码(二的补码,详情参见:[http://en.wikipedia.org/wiki/Two's_complement](http://en.wikipedia.org/wiki/Two's_complement))。
|
||||||
|
|
||||||
|
Go 也有基于架构的类型,例如:int、uint 和 uintptr。
|
||||||
|
|
||||||
|
这些类型的长度都是根据运行程序所在的操作系统类型所决定的:
|
||||||
|
|
||||||
|
- `int` 和 `uint` 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。
|
||||||
|
- `uintptr` 的长度被设定为足够存放一个指针即可。
|
||||||
|
|
||||||
|
Go 语言中没有 float 类型。
|
||||||
|
|
||||||
|
与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来:
|
||||||
|
|
||||||
|
整数:
|
||||||
|
|
||||||
|
- int8(-128 -> 127)
|
||||||
|
- int16(-32768 -> 32767)
|
||||||
|
- int32(-2,147,483,648 -> 2,147,483,647)
|
||||||
|
- int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
|
||||||
|
|
||||||
|
无符号整数:
|
||||||
|
|
||||||
|
- uint8(0 -> 255)
|
||||||
|
- uint16(0 -> 65,535)
|
||||||
|
- uint32(0 -> 4,294,967,295)
|
||||||
|
- uint64(0 -> 18,446,744,073,709,551,615)
|
||||||
|
|
||||||
|
浮点型(IEEE-754 标准):
|
||||||
|
|
||||||
|
- float32(+- 1e-45 -> +- 3.4 * 1e38)
|
||||||
|
- float64(+- 5 * 1e-324 -> 107 * 1e308)
|
||||||
|
|
||||||
|
int 型是计算最快的一种类型。
|
||||||
|
|
||||||
|
整型的零值为 0,浮点型的零值为 0.0。
|
||||||
|
|
||||||
|
float32 精确到小数点后 7 位,float64 精确到小数点后 15 位。由于精确度的缘故,你在使用 `==` 或者 `!=` 来比较浮点数时应当非常小心。你最好在正式使用前测试对于精确度要求较高的运算。
|
||||||
|
|
||||||
|
你应该尽可能地使用 float64,因为 `math` 包中所有有关数学运算的函数都会要求接收这个类型。
|
||||||
|
|
||||||
|
你可以通过增加前缀 0 来表示 8 进制数(如:077),增加前缀 0x 来表示 16 进制数(如:0xFF),以及使用 e 来表示 10 的连乘(如: 1e3 = 1000,或者 6.022e23 = 6.022 x 1e23)。
|
||||||
|
|
||||||
|
你可以使用 `a := uint64(0)` 来同时完成类型转换和赋值操作,这样 a 的类型就是 uint64。
|
||||||
|
|
||||||
|
Go 中不允许不同类型之间的混合使用,但是对于常量的类型限制非常少,因此允许常量之间的混合使用,下面这个程序很好地解释了这个现象(该程序无法通过编译):
|
||||||
|
|
||||||
|
Example 4.8 [type_mixing.go](examples/chapter_4/type_mixing.go)
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var a int
|
||||||
|
var b int32
|
||||||
|
a = 15
|
||||||
|
b = a + a // 编译错误
|
||||||
|
b = b + 5 // 因为 5 是常量,所以可以通过编译
|
||||||
|
}
|
||||||
|
|
||||||
|
如果你尝试编译该程序,则将得到编译错误 `cannot use a + a (type int) as type int32 in assignment`。
|
||||||
|
|
||||||
|
同样地,int16 也不能够被隐式转换为 int32。
|
||||||
|
|
||||||
|
下面这个程序展示了通过显示转换来避免这个问题(第 4.2 节)。
|
||||||
|
|
||||||
|
Example 4.9 [casting.go](examples/chapter_4/casting.go)
|
||||||
|
|
||||||
|
package main
|
||||||
|
import “fmt”
|
||||||
|
func main() {
|
||||||
|
var n int16 = 34
|
||||||
|
var m int32
|
||||||
|
// compiler error: cannot use n (type int16) as type int32 in assignment
|
||||||
|
//m = n
|
||||||
|
m = int32(n)
|
||||||
|
|
||||||
|
fmt.Printf(“32 bit int is: %d\n”, m)
|
||||||
|
fmt.Printf(“16 bit int is: %d\n”, n)
|
||||||
|
}
|
||||||
|
// the output is:
|
||||||
|
32 bit int is: 34
|
||||||
|
16 bit int is: 34
|
||||||
|
|
||||||
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
||||||
要不等到 ***2013 年 5 月 13 日*** 再来看看吧~~
|
要不等到 ***2013 年 5 月 17 日*** 再来看看吧~~
|
||||||
|
|
||||||
这里还有一些其它的学习资源噢~
|
这里还有一些其它的学习资源噢~
|
||||||
|
|
||||||
@@ -90,8 +174,8 @@ Go 语言中包含以下逻辑运算符:
|
|||||||
- [Go语言学习园地](http://studygolang.com/)
|
- [Go语言学习园地](http://studygolang.com/)
|
||||||
- [Golang中国](http://golang.tc)
|
- [Golang中国](http://golang.tc)
|
||||||
|
|
||||||
##4.5.2 数字类型
|
**格式化说明符**
|
||||||
###4.5.2.1 整型 int 和浮点型 float
|
|
||||||
|
|
||||||
##链接
|
##链接
|
||||||
- [目录](directory.md)
|
- [目录](directory.md)
|
||||||
|
Reference in New Issue
Block a user