第3章,部分字词修订。

This commit is contained in:
zhliner
2017-08-24 22:26:40 +08:00
parent 9f90d30fa7
commit 725acf091c
10 changed files with 34 additions and 34 deletions

View File

@@ -28,7 +28,7 @@ Unicode字符rune类型是和int32等价的类型通常用于表示一个Unic
对于上表中前两行的运算符,例如+运算符还有一个与赋值相结合的对应运算符+=,可以用于简化赋值语句。
算术运算符`+``-``*``/`可以适用于整数、浮点数和复数,但是取模运算符%仅用于整数间的运算。对于不同编程语言,%取模运算的行为可能并不相同。在Go语言中%取模运算符的符号和被取模数的符号总是一致的,因此`-5%3``-5%-3`结果都是-2。除法运算符`/`的行为则依赖于操作数是否全为整数,比如`5.0/4.0`的结果是1.25但是5/4的结果是1因为整数除法会向着0方向截断余数。
算术运算符`+``-``*``/`可以适用于整数、浮点数和复数,但是取模运算符%仅用于整数间的运算。对于不同编程语言,%取模运算的行为可能并不相同。在Go语言中%取模运算符的符号和被取模数的符号总是一致的,因此`-5%3``-5%-3`结果都是-2。除法运算符`/`的行为则依赖于操作数是否全为整数,比如`5.0/4.0`的结果是1.25但是5/4的结果是1因为整数除法会向着0方向截断余数。
一个算术运算的结果不管是有符号或者是无符号的如果需要更多的bit位才能正确表示的话就说明计算结果是溢出了。超出的高位的bit位部分将被丢弃。如果原始的数值是有符号类型而且最左边的bit位是1的话那么最终结果可能是负的例如int8的例子
@@ -101,11 +101,11 @@ fmt.Printf("%08b\n", x>>1) // "00010001", the set {0, 4}
6.5节给出了一个可以远大于一个字节的整数集的实现。)
`x<<n``x>>n`移位运算中决定了移位操作bit数部分必须是无符号数被操作的x可以是有符号或无符号数。算术上,一个`x<<n`左移运算等价于乘以$2^n$,一个`x>>n`右移运算等价于除以$2^n$。
`x<<n``x>>n`移位运算中,决定了移位操作bit数部分必须是无符号数被操作的x可以是有符号或无符号数。算术上,一个`x<<n`左移运算等价于乘以$2^n$,一个`x>>n`右移运算等价于除以$2^n$。
左移运算用零填充右边空缺的bit位无符号数的右移运算也是用0填充左边空缺的bit位但是有符号数的右移运算会用符号位的值填充左边空缺的bit位。因为这个原因最好用无符号运算这样你可以将整数完全当作一个bit位模式处理。
尽管Go语言提供了无符号数运算即使数值本身不可能出现负数我们还是倾向于使用有符号的int类型就像数组的长度那样虽然使用uint无符号类型似乎是一个更合理的选择。事实上内置的len函数返回一个有符号的int我们可以像下面例子那样处理逆序循环。
尽管Go语言提供了无符号数运算,即使数值本身不可能出现负数我们还是倾向于使用有符号的int类型就像数组的长度那样虽然使用uint无符号类型似乎是一个更合理的选择。事实上内置的len函数返回一个有符号的int我们可以像下面例子那样处理逆序循环。
```Go
medals := []string{"gold", "silver", "bronze"}
@@ -118,9 +118,9 @@ for i := len(medals) - 1; i >= 0; i-- {
出于这个原因无符号数往往只有在位运算或其它特殊的运算场景才会使用就像bit集合、分析二进制文件格式或者是哈希和加密操作等。它们通常并不用于仅仅是表达非负数量的场合。
一般来说,需要一个显式的转换将一个值从一种类型转化另一种类型,并且算术和逻辑运算的二元操作中必须是相同的类型。虽然这偶尔会导致需要很长的表达式,但是它消除了所有和类型相关的问题,而且也使得程序容易理解。
一般来说,需要一个显式的转换将一个值从一种类型转化另一种类型,并且算术和逻辑运算的二元操作中必须是相同的类型。虽然这偶尔会导致需要很长的表达式,但是它消除了所有和类型相关的问题,而且也使得程序容易理解。
在很多场景,会遇到类似下面代码通用的错误:
在很多场景,会遇到类似下面代码的常见的错误:
```Go
var apples int32 = 1
@@ -150,7 +150,7 @@ f = 1.99
fmt.Println(int(f)) // "1"
```
浮点数到整数的转换将丢失任何小数部分,然后向数轴零方向截断。你应该避免对可能会超出目标类型表示范围的数值类型转换,因为截断的行为可能依赖于具体的实现:
浮点数到整数的转换将丢失任何小数部分,然后向数轴零方向截断。你应该避免对可能会超出目标类型表示范围的数值类型转换,因为截断的行为可能依赖于具体的实现:
```Go
f := 1e100 // a float64