mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 05:33:04 +08:00
4.5.2.4.md
This commit is contained in:
125
eBook/04.5.md
125
eBook/04.5.md
@@ -193,8 +193,129 @@ Example 4.9 [casting.go](examples/chapter_4/casting.go)
|
|||||||
|
|
||||||
**问题 4.1: int 和 int64 是相同的类型吗?**
|
**问题 4.1: int 和 int64 是相同的类型吗?**
|
||||||
|
|
||||||
|
###4.5.2.2 复数
|
||||||
|
Go 拥有以下复数类型:
|
||||||
|
|
||||||
|
complex64 (32 位实数和虚数)
|
||||||
|
complex128 (64 位实数和虚数)
|
||||||
|
|
||||||
|
复数使用 `re+imI` 来表示,其中 `re` 代表实数部分,`im` 代表虚数部分,I 代表根号负 1。
|
||||||
|
|
||||||
|
示例:
|
||||||
|
|
||||||
|
var c1 complex64 = 5 + 10i
|
||||||
|
fmt.Printf(“The value is: %v”, c1)
|
||||||
|
// 输出: 5 + 10i
|
||||||
|
|
||||||
|
如果 `re` 和 `im` 的类型均为 float32,那么类型为 complex64 的复数 c 可以通过以下方式来获得:
|
||||||
|
|
||||||
|
c = complex(re, im)
|
||||||
|
|
||||||
|
函数 `real(c)` 和 `imag(c)` 可以分别获得相应的实数和虚数部分。
|
||||||
|
|
||||||
|
在使用格式化标识符时,可以使用 `%v` 来表示复数,但当你希望只表示其中的一个部分的时候需要使用 `%f`。
|
||||||
|
|
||||||
|
复数支持和其它数字类型一样的运算。当你使用等号 `==` 或者不等号 `!=` 对复数进行比较运算时,注意对精确度的把握。`cmath` 包中包含了一些操作复数的公共方法。如果你对内存的要求不是特别高,最好使用 complex128 作为计算类型,因为相关函数都使用这个类型的参数。
|
||||||
|
|
||||||
|
###4.5.2.3 位运算
|
||||||
|
位运算只能用于整数类型的变量,且需当它们拥有等长位模式时。
|
||||||
|
|
||||||
|
`%b` 是用于表示位的格式化标识符。
|
||||||
|
|
||||||
|
**二元运算符**
|
||||||
|
|
||||||
|
- 按位与 `&`:
|
||||||
|
|
||||||
|
对应位置上的值经过和运算结果,具体参见和运算符,第 4.5.1 节,并将 T(true)替换为 1,将 F(false)替换为 0
|
||||||
|
|
||||||
|
1 & 1 -> 1
|
||||||
|
1 & 0 -> 0
|
||||||
|
0 & 1 -> 0
|
||||||
|
0 & 0 -> 0
|
||||||
|
|
||||||
|
- 按位或 `|`:
|
||||||
|
|
||||||
|
对应位置上的值经过或运算结果,具体参见或运算符,第 4.5.1 节,并将 T(true)替换为 1,将 F(false)替换为 0
|
||||||
|
|
||||||
|
1 & 1 -> 1
|
||||||
|
1 & 0 -> 1
|
||||||
|
0 & 1 -> 1
|
||||||
|
0 & 0 -> 0
|
||||||
|
|
||||||
|
- 按位异或 `^`:
|
||||||
|
|
||||||
|
对应位置上的值根据以下规则组合:
|
||||||
|
|
||||||
|
1 & 1 -> 0
|
||||||
|
1 & 0 -> 1
|
||||||
|
0 & 1 -> 1
|
||||||
|
0 & 0 -> 0
|
||||||
|
|
||||||
|
- 位清除 `&^`:将指定位置上的值设置为 0。
|
||||||
|
|
||||||
|
**一元运算符**
|
||||||
|
|
||||||
|
- 按位补足 `^`:
|
||||||
|
|
||||||
|
该运算符与异或运算符一同使用,即 `m^x`,对于无符号 x 使用“全部位设置为 1”,对于有符号 x 时使用 `m=-1`。例如:
|
||||||
|
|
||||||
|
^2 = ^10 = -01 ^ 10 = -11
|
||||||
|
|
||||||
|
- 位左移 `<<`:
|
||||||
|
|
||||||
|
- 用法:`bitP << n`。
|
||||||
|
- `bitP` 的位向左移动 n 位,右侧空白部分使用 0 填充;如果 n 等于 2,则结果是 2 的相应倍数,即 2 的 n 次方。例如:
|
||||||
|
|
||||||
|
1 << 10 // 等于 1 KB
|
||||||
|
1 << 20 // 等于 1 MB
|
||||||
|
1 << 30 // 等于 1 GB
|
||||||
|
|
||||||
|
- 位右移 `>>`:
|
||||||
|
|
||||||
|
- 用法:`bitP >> n`。
|
||||||
|
- `bitP` 的位向右移动 n 位,左侧空白部分使用 0 填充;如果 n 等于 2,则结果是当前值除以 2 的 n 次方。
|
||||||
|
|
||||||
|
当希望把结果赋值给第一个操作数时,可以简写为 `a <<= 2` 或者 `b ^= a & 0xffffffff`。
|
||||||
|
|
||||||
|
**位左移常见实现存储单位的用例**
|
||||||
|
|
||||||
|
使用位左移与 iota 计数配合可优雅地实现存储单位的常量枚举:
|
||||||
|
|
||||||
|
type ByteSize float64
|
||||||
|
const (
|
||||||
|
_ = iota // 通过赋值给空白标识符来忽略值
|
||||||
|
KB ByteSize = 1<<(10*iota)
|
||||||
|
MB
|
||||||
|
GB
|
||||||
|
TB
|
||||||
|
PB
|
||||||
|
EB
|
||||||
|
ZB
|
||||||
|
YB
|
||||||
|
)
|
||||||
|
|
||||||
|
**在通讯中使用位左移表示标识的用例**
|
||||||
|
|
||||||
|
type BitFlag int
|
||||||
|
const (
|
||||||
|
Active BitFlag = 1 << iota // 1 << 0 == 1
|
||||||
|
Send // 1 << 1 == 2
|
||||||
|
Receive // 1 << 2 == 4
|
||||||
|
)
|
||||||
|
|
||||||
|
flag := Active | Send // == 3
|
||||||
|
|
||||||
|
###4.5.2.4 逻辑运算符
|
||||||
|
Go 中拥有以下逻辑运算符:`==`、`!=`(第 4.5.1 节)、`<`、`<=`、`>`、`>=`。
|
||||||
|
|
||||||
|
它们之所以被称为逻辑运算符是因为它们的运算结果总是为布尔值 `bool`。例如:
|
||||||
|
|
||||||
|
b3:= 10 > 5 // b3 is true
|
||||||
|
|
||||||
|
###4.5.2.5 算术运算符
|
||||||
|
|
||||||
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
||||||
要不等到 ***2013 年 5 月 20 日*** 再来看看吧~~
|
要不等到 ***2013 年 6 月 11 日*** 再来看看吧~~
|
||||||
|
|
||||||
这里还有一些其它的学习资源噢~
|
这里还有一些其它的学习资源噢~
|
||||||
|
|
||||||
@@ -208,8 +329,6 @@ Example 4.9 [casting.go](examples/chapter_4/casting.go)
|
|||||||
- [Go语言学习园地](http://studygolang.com/)
|
- [Go语言学习园地](http://studygolang.com/)
|
||||||
- [Golang中国](http://golang.tc)
|
- [Golang中国](http://golang.tc)
|
||||||
|
|
||||||
###4.5.2.2 复数
|
|
||||||
|
|
||||||
##链接
|
##链接
|
||||||
- [目录](directory.md)
|
- [目录](directory.md)
|
||||||
- 上一节:[变量](04.4.md)
|
- 上一节:[变量](04.4.md)
|
||||||
|
Reference in New Issue
Block a user