1,int長度
點擊查看代碼
package main
import (
"fmt"
"unsafe"
)
func main() {
var i1 int = 1
var i2 int8 = 2
var i3 int16 = 3
var i4 int32 = 4
var i5 int64 = 5
fmt.Println(unsafe.Sizeof(i1))
fmt.Println(unsafe.Sizeof(i2))
fmt.Println(unsafe.Sizeof(i3))
fmt.Println(unsafe.Sizeof(i4))
fmt.Println(unsafe.Sizeof(i5))
}
輸出:
[root@localhost tmp]# go run test.go
8
1
2
4
8
int類型的大小為 8 字節
int8類型大小為 1 字節
int16類型大小為 2 字節
int32類型大小為 4 字節
int64類型大小為 8 字節
通過上述可以看到,int和int64運行的結果一樣。int64是有符號 64 位整型,而在64位操作系統中int的大小也是64位(8字節)。
直接看一下官方文檔:
int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.
翻譯一下,就是說這個整形最少占32位,int和int32是兩碼事。
uint is a variable sized type, on your 64 bit computer uint is 64 bits wide.
uint和uint8等都屬於無符號int類型
uint類型長度取決於 CPU,如果是32位CPU就是4個字節,如果是64位就是8個字節。
More
這里就會出現一個情況,int和uint是根據 CPU 變化的,如何知道當前系統的情況?
CPU 型號:runtime.GOARCH
int的長度:strconv.IntSize
總結
go語言中的int的大小是和操作系統位數相關的,如果是32位操作系統,int類型的大小就是4字節。如果是64位操作系統,int類型的大小就是8個字節。
版權聲明:本文為CSDN博主「wolfengi」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/FromTheWind/article/details/105862844
2,int長度的極限
點擊查看代碼
package main
import (
"fmt"
_ "time"
)
func main() {
a := byte(255) //11111111 這是byte的極限, 因為 a := byte(256)//越界報錯, 0~255正好256個數,不能再高了
b := uint8(255) //11111111 這是uint8的極限,因為 c := uint8(256)//越界報錯,0~255正好256個數,不能再高了
c := int8(127) //01111111 這是int8的極限, 因為 b := int8(128)//越界報錯, 0~127正好128個數,所以int8的極限只是256的一半
d := int8(a) //11111111 打印出來則是-0000001,int8(128)、int8(255)、int8(byte(255))都報錯越界,因為int極限是127,但是卻可以寫:int8(a),第一位拿來當符號了
e := int8(c) //01111111 打印出來還是01111111
fmt.Printf("%08b %d \n", a, a)
fmt.Printf("%08b %d \n", b, b)
fmt.Printf("%08b %d \n", c, c)
fmt.Printf("%08b %d \n", d, d)
fmt.Printf("%08b %d \n", e, e)
}