Overview
- 整型的分类
- 有符号整型
- 无符号整型
- 整形之间的转换 intxxx()
- 整形与字符串之间的转换strconv
- 整形转字符串
- 字符串转整形
- 超大整型math/big
Description
1)整型的分类
- 有符号整型:
int8 (-128 -> 127)
int16 (-32768-> 32767)
int32 (-2147483648 -> 2147483647)
int64 (-9223372036854775808 -> 92233720368547758087)
int,在32位操作系统上使用32位(同int32),在64位操作系统上使用64位(同int64)
- 无符号整型:
uint8:(0 -> 255)
uint16:(0 -> 65535)
uint32: (0 -> 4294967295)
uint64:(0 -> 18446744073709551615)
uint,在32位操作系统上使用32位(同uint32),在64位操作系统上使用64位(同uint64)
2)整形之间的转换 intxxx()
不同整形类型之间是不可以进行运算的

需要将其转为同一类型才可以:

package main
import (
"fmt"
"reflect"
)
func main() {
var n1 int8 = 1
var n2 int16 = 2
n3 := int16(n1) + n2
fmt.Println(n3, reflect.TypeOf(n3))
}
3)整形与字符串之间的转换strconv
strconv.Itoa 也就是 Integer to ASCII
strconv.Atoi 也就是 ASCII to Integer
-
整形转字符串

package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
var v1 int = 1
v2 := strconv.Itoa(v1)
fmt.Println(reflect.TypeOf(v2))
}
-
字符串转整形


字符串转整形的时候,strconv.Atoi是包含2个参数: (int,error),因此是
v2, err := strconv.Atoi(v1),可以使用"_"占位符来忽略err
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
var v1 string = "1"
v2, _ := strconv.Atoi(v1)
fmt.Println(reflect.TypeOf(v2))
}
4)超大整型math/big
-
创建超大整型对象math/big
两种方式进行赋值:Setint64() 和SetString()
Setint64()

package main
import (
"fmt"
"math/big"
)
func main() {
var v1 big.Int
v1.SetInt64(9223372036854775807)
fmt.Println(v1.Int64())
}
SetString()

package main
import (
"fmt"
"math/big"
)
func main() {
var v1 big.Int
v1.SetString("92233720368547758079223372036854775807", 10) //这里的10代表十进制
fmt.Println(v1.String())
}
-
对指针创建超大整形对象

package main
import (
"fmt"
"math/big"
)
func main() {
//var v1 *big.Int 声明指针,默认是nil,无法直接赋值
v2 := new(big.Int)
v3 := new(big.Int)
v2.SetInt64(9223372036854775807)
v3.SetString("92233720368547758079223372036854775807", 10)
fmt.Println(v2.Int64())
fmt.Println(v3.String())
}
-
超大整形的加减乘除
相加 .Add

package main
import (
"fmt"
"math/big"
)
func main() {
n1 := new(big.Int)
n2 := new(big.Int)
n1.SetInt64(22)
n2.SetInt64(2)
//超大整型指针进行加紧乘除,需要重新定义一个新的变量来存储
result := new(big.Int)
result.Add(n1, n2)
fmt.Println(result.Int64())
}
相减 .Sub

package main
import (
"fmt"
"math/big"
)
func main() {
n1 := new(big.Int)
n2 := new(big.Int)
n1.SetInt64(22)
n2.SetInt64(2)
//超大整型指针进行加紧乘除,需要重新定义一个新的变量来存储
result := new(big.Int)
result.Sub(n1, n2)
fmt.Println(result.Int64())
}
相乘 .Mul

package main
import (
"fmt"
"math/big"
)
func main() {
n1 := new(big.Int)
n2 := new(big.Int)
n1.SetInt64(22)
n2.SetInt64(2)
//超大整型指针进行加紧乘除,需要重新定义一个新的变量来存储
result := new(big.Int)
result.Mul(n1, n2)
fmt.Println(result.Int64())
}
相除 .Div

package main
import (
"fmt"
"math/big"
)
func main() {
n1 := new(big.Int)
n2 := new(big.Int)
n1.SetInt64(22)
n2.SetInt64(2)
//超大整型指针进行加紧乘除,需要重新定义一个新的变量来存储
result := new(big.Int)
result.Div(n1, n2)
fmt.Println(result.Int64())
}
1万+

被折叠的 条评论
为什么被折叠?



