mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-11-04 21:43:42 +00:00
Update ch3-01.md
This commit is contained in:
parent
f796a99124
commit
b88c28f867
@ -30,4 +30,51 @@ Go同时提供了有符号和无符号的整数运算. 这里有四种int8, int1
|
||||
|
||||
整数的算术运算符 +, -, *, 和 / 可以适用与整数, 浮点数和复数, 但是取模运算符 % 仅用于整数. 不同编程语言间, % 取模运算的行为并不相同. 在Go语言中, % 取模运算符的符号和被取模数的符号总是一致的, 因此 `-5%3` 和 `-5%-3` 结果都是 -2.除法运算符 `/` 的行为依赖于操作数是否为整数, 因此 `5.0/4.0` 的结果是 1.25, 但是 5/4 的结果是 1, 因此整数除法会向着0方向截断余数.
|
||||
|
||||
|
||||
如果一个算术运算的结果, 不管是有符号或者是无符号的, 如果需要更多的bit位才能表示, 就说明是溢出了. 超出的高位的bit位部分将被丢弃. 如果原始的数值是有符号类型, 那么最终结果可能是负的, 如果最左边的bit为是1的话, 例如int8的例子:
|
||||
|
||||
```Go
|
||||
var u uint8 = 255
|
||||
fmt.Println(u, u+1, u*u) // "255 0 1"
|
||||
|
||||
var i int8 = 127
|
||||
fmt.Println(i, i+1, i*i) // "127 -128 1"
|
||||
```
|
||||
|
||||
两个相同的整数类型可以使用下面的二元比较运算符进行比较; 比较表达式的结果是布尔类型.
|
||||
|
||||
```
|
||||
== equal to
|
||||
!= not equal to
|
||||
< less than
|
||||
<= less than or equal to
|
||||
> greater than
|
||||
>= greater than or equal to
|
||||
```
|
||||
|
||||
事实上, 布尔型, 数字类型 和 字符串 等基本类型都是可比较的, 也就是说两个相同类型的值可以用 == 和 != 进行比较. 此外, 整数, 浮点数和字符串可以根据比较结果排序. 许多其他类型的值是不可比较, 因此也就是不可排序的. 对于我们遇到的每种类型, 我们需要保证规则是类似的.
|
||||
|
||||
这里是一元的加法和减法运算符:
|
||||
|
||||
```
|
||||
+ 一元加法 (无效果)
|
||||
- 负数
|
||||
```
|
||||
|
||||
对于整数, +x 是 0+x 的简写, -x 是 0-x 的简写; 对于浮点数和复数, +x 就是 x, -x 则是 x 的负数.
|
||||
|
||||
Go语言还提供了以下的bit位操作运算符, 前面4个操作运算符并不区分是有符号还是无符号数:
|
||||
|
||||
```
|
||||
& 位运算 AND
|
||||
| 位运算 OR
|
||||
^ 位运算 XOR
|
||||
&^ 位清空 (AND NOT)
|
||||
<< 左移
|
||||
>> 右移
|
||||
```
|
||||
|
||||
位操作运算符 `^` 作为二元运算符时是按位异或(XOR), 当用作一元运算符时表示按位取反; 也就是说, 它返回一个每个bit位都取反的数. 位操作运算符 `&^` 用于按位置零(AND NOT): 表达式 `z = x &^ y` 结果z的bit位1, 如果对应y中bit位为1, 否则对应的bit位等于x相应的bit位的值.
|
||||
|
||||
|
||||
TODO
|
||||
|
Loading…
Reference in New Issue
Block a user