go的int長度


參考自:https://blog.csdn.net/FromTheWind/article/details/105862844?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&utm_relevant_index=2

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)
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM