以下笔记摘录自『 The Go Workshop 』。
如果尝试在建立变数时,赋予一个超过型别容许上限的初始值,就会发生溢位(overflow)错误。以int8为例,他能容许的最大值是127。
For example,
package main
import "fmt"
func main() {
var a int8 = 128
fmt.Println(a)
}
///
Output
constant 128 overflows int8
这个问题不难修正,但真正的问题是若在建立变数後,才将他的值设超过127,这时会发生越界绕回(wraparound)现象,也就是超过最大值後重新从最小值计算。
很容易碰上越界绕回这个陷阱,因为编辑器也没办法拦截。
package main
import "fmt"
func main() {
var a int8 = 125
var b uint8 = 253
for i := 0; i < 5; i++ {
a++
b++
fmt.Println(i, ")", "int8", a, "uint8", b)
}
}
// Output
0 ) int8 126 uint8 254
1 ) int8 127 uint8 255
2 ) int8 -128 uint8 0
3 ) int8 -127 uint8 1
4 ) int8 -126 uint8 2
如果需要的数值超过(低於)int64与uint64,可以向套件math/big求助。
package main
import (
"fmt"
"math"
"math/big"
)
func main() {
intA := math.MaxInt64
intA = intA + 1
bigA := big.NewInt(math.MaxInt64)
bigA.Add(bigA, big.NewInt(1))
fmt.Println("MaxInt64: ", math.MaxInt64)
fmt.Println("Int :", intA)
fmt.Println("Big Int : ", bigA.String())
}
// Output
MaxInt64: 9223372036854775807 <--- int64 最大值
Int : -9223372036854775808 <--- int 发生越界绕回
Big Int : 9223372036854775808 <--- big int 正确 +1
在Go语言里面,byte型别其实就是unit8型别的别名,後者是以8个位元储存的正整数。
每一个位元(bit)代表一个二进位值,意即开或关(1或0)。8个位元总共有256种可能的『开关』组合,而既然unit8的值是由0到255,那就可以用0到255的整数来代表256种状态。
<<: 30天学会 Python: Day 13-站在巨人的肩上
图 21-1: 付款方式列表 我们已经建立了继承 WC_Payment_Gateway 的的 WC...
前言 看到今天标题 useState, 你可能会说我前面不是讲过了吗XD 其实之前那样算是直接跳过第...
为什麽要特别写 Form 表单攻略呢? 因为这是使用者可以输入资料的常见途径,一种可以「写入」资料的...
Virtual Judge ZeroJudge 题意 输入粒子经过 t 秒後的速度为 v,求 2t...
前言 今天完成原型剩下的工作吧。 帖子修正 回覆帖子 流程就是输入要显示的名字及回覆内容, 最後到点...