Go語言:數字類型變量的內存字節數,取值範圍以及最大最小值的獲取方法

知道各種整形浮點型數字的取值範圍對於節約內存選擇合適的數字類型很有必要。另一方面,有時候需要如JAVA 的Integer.MAX_VALUE那樣獲取某種數字類型的最大(最小)取值,Golang把這些取值封裝在math包作爲常量供開發者調用。

數字類型變量的字節數和取值範圍如下:

  • int8 1B -128~127
  • int16 2B -32768~32767
  • int32 4B -2147483648~2147483647
  • int64 8B -9223372036854775808~9223372036854775807
  • uint8 1B 0~255
  • uint16 2B 0~65535
  • uint32 4B 0~4294967295
  • uint64 8B 0~18446744073709551615
  • float32 4B -3.4028234663852886e+38~3.4028234663852886e+38
  • float64 8B -1.7976931348623157e+308~1.7976931348623157e+308

  ( uint和int在64位機上依次等同於uint64,int64)

  • uint 8B 0~18446744073709551615
  • int 8B -9223372036854775807~9223372036854775807
     

 獲取取值範圍的代碼如下:

package main

import (
	"fmt"
	"math"
	"unsafe"
)

func main() {
	var i8 int8
	var i16 int16
	var i32 int32
	var i64 int64
	var ui8 uint8
	var ui16 uint16
	var ui32 uint32
	var ui64 uint64

	fmt.Printf("%T %dB %v~%v\n", i8, unsafe.Sizeof(i8), math.MinInt8, math.MaxInt8)
	fmt.Printf("%T %dB %v~%v\n", i16, unsafe.Sizeof(i16), math.MinInt16, math.MaxInt16)
	fmt.Printf("%T %dB %v~%v\n", i32, unsafe.Sizeof(i32), math.MinInt32, math.MaxInt32)
	fmt.Printf("%T %dB %v~%v\n", i64, unsafe.Sizeof(i64), math.MinInt64, math.MaxInt64)

	fmt.Printf("%T %dB %v~%v\n", ui8, unsafe.Sizeof(ui8), 0, math.MaxUint8)
	fmt.Printf("%T %dB %v~%v\n", ui16, unsafe.Sizeof(ui16), 0, math.MaxUint16)
	fmt.Printf("%T %dB %v~%v\n", ui32, unsafe.Sizeof(ui32), 0, math.MaxUint32)
	fmt.Printf("%T %dB %v~%v\n", ui64, unsafe.Sizeof(ui64), 0, uint64(math.MaxUint64))

	var f32 float32
	var f64 float64

	fmt.Printf("%T %dB %v~%v\n", f32, unsafe.Sizeof(f32), -math.MaxFloat32, math.MaxFloat32)
	fmt.Printf("%T %dB %v~%v\n", f64, unsafe.Sizeof(f64), -math.MaxFloat64, math.MaxFloat64)

	var ui uint
	ui = uint(math.MaxUint64) //再+1會導致overflows錯誤
	fmt.Printf("%T %dB %v~%v\n", ui, unsafe.Sizeof(ui), 0, ui)

	var imax, imin int
	imax = int(math.MaxInt64) //再+1會導致overflows錯誤
	imin = int(math.MinInt64) //再-1會導致overflows錯誤

	fmt.Printf("%T %dB %v~%v\n", imax, unsafe.Sizeof(imax), imin, imax)
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章