「Go」Go數據類型之整型和浮點型

不積跬步,無以至千里;不積小流,無以成江海。

碼字不易,點贊再看。

Go語言中有豐富的數據類型,除了基本的整型、浮點型、布爾型、字符串外,還有數組、切片、結構體、函數、map、通道(channel)等。Go 語言的基本類型和其他語言大同小異。

整型

整型分為以下兩個大類: 按長度分為:int8、int16、int32、int64 對應的無符號整型:uint8、uint16、uint32、uint64

其中,uint8 就是我們熟知的 byte 型(後續會介紹到),int16對應C語言中的short型,int64對應C語言中的long型。


「Go」Go數據類型之整型和浮點型

特殊整型


「Go」Go數據類型之整型和浮點型

注意:int 和 uint 的區別就在於一個 u,有 u 說明是 無符號,沒有 u 代表 有符號。

注意事項: 由於 int和 uint 是根據操作系統變化的,所以在某些場景下,你應當避免使用 int 和 uint ,而使用更加精確的 int32 和 int64,比如在二進制傳輸、讀寫文件的結構描述(為了保持文件的結構不會受到不同編譯目標平臺字節長度的影響)

數字字面量語法(Number literals syntax)

出於習慣,在初始化數據類型為整形的變量時,我們會使用10進制的表示法,因為它最直觀,比如這樣,表示整數10.比如:

<code>

var

num =

10

/<code>

Go1.13版本之後引入了數字字面量語法,這樣便於開發者以二進制、八進制或十六進制浮點數的格式定義數字,例如:

v := 0b00101101, 代表二進制的 101101,相當於十進制的 45。

v := 0o377,代表八進制的 377,相當於十進制的 255。

v := 0x1p-2,代表十六進制的 1 除以 2²,也就是 0.25。

而且還允許我們用 _ 來分隔數字,比如說:v := 123_456 等於 123456。

我們可以藉助fmt函數來將一個整數以不同進制形式展示。


「Go」Go數據類型之整型和浮點型

「Go」Go數據類型之整型和浮點型

浮點型

浮點數類型的值一般由 整數部分、小數點“.” 和 小數部分 組成。

其中,整數部分和小數部分均由10進製表示法表示。不過還有另一種表示方法。那就是在其中加入 指數部分。指數部分由“E”或“e”以及一個帶 正負號 的10進制數組成。比如,3.7E-2表示浮點數0.037。又比如,3.7E+1表示浮點數37。

有時候,浮點數類型值的表示也可以被簡化。比如,37.0可以被簡化為37。又比如,0.037可以被簡化為.037。

有一點需要注意,在Go語言裡,浮點數的相關部分只能由10進製表示法表示,而不能由8進製表示法或16進製表示法表示。比如,03.7表示的一定是浮點數3.7。

float32 和 float64

Go語言支持兩種浮點型數:float32 和 float64。

這兩種浮點型數據格式遵循 IEEE 754標準: float32 的浮點數的最大範圍約為 3.4e38,可以使用常量定義:math.MaxFloat32

float64 的浮點數的最大範圍約為 1.8e308,可以使用一個常量定義:math.MaxFloat64。

float32 也即我們常說的單精度,存儲佔用4個字節,也即4*8=32位,其中1位用來符號,8位用來指數,剩下的23位表示尾數

float64,也即我們熟悉的雙精度,存儲佔用8個字節,也即8*8=64位,其中1位用來符號,11位用來指數,剩下的52位表示尾數

數值很大但精度有限

人家雖然能表示的數值很大,但精度位卻沒有那麼大。

float32的精度只能提供大約6個十進制數(表示後科學計數法後,小數點後6位)的精度

float64的精度能提供大約15個十進制數(表示後科學計數法後,小數點後15位)的精度

超過精度的話 會造成精度丟失,比如:

「Go」Go數據類型之整型和浮點型

返回 True

點關注 不迷路

如果你從本篇內容有收穫,求 點贊,求 關注,求 轉發 ,讓更多的人學習到。

如果本文有任何錯誤,請批評指教,不勝感激


分享到:


相關文章: