亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Go 有幾種不同的整數類型?

為什么 Go 有幾種不同的整數類型?

Go
手掌心 2021-10-18 17:06:43
我發現 Go 中有不同的整數類型令人困惑??紤]到許多其他主要編程語言中不存在這些區別,定義這些不同類別的必要性是什么?int  int8  int16  int32  int64uint uint8 uint16 uint32 uint64 uintptr
查看完整描述

3 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

Go有兩種類型:

  1. 依賴于體系結構的類型, 例如intuintuintptr。和

  2. 體系結構無關的類型int32,int64

依賴于體系結構的類型對于運行程序的機器具有適當的長度:

  • anint是默認的有符號類型:在 32 位機器上需要 32 位(4 字節),在 64 位機器上需要 64 位(8 字節);unsigned 也是如此uint。

  • uintptr 是一個足以存儲指針值的無符號整數。

與體系結構無關的類型具有由其名稱指示的固定大?。ㄒ晕粸閱挝唬?/p>

對于整數,范圍是:

int8 (-128 -> 127)

int16 (-32768 -> 32767)

int32 (? 2,147,483,648 -> 2,147,483,647)

int64 (? 9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)

對于無符號整數:


uint8 (with alias byte, 0 -> 255)

uint16 (0 -> 65,535)

uint32 (0 -> 4,294,967,295)

uint64 (0 -> 18,446,744,073,709,551,615)

對于花車:


float32 (+- 1O-45 -> +- 3.4 * 1038 )

(IEEE-754) float64 (+- 5 * 10-324 -> 1.7 * 10308 )

int是提供最快處理速度的整數類型。整數的初始(默認)值為0,對于浮點數,這是0.0 一個 float32 可靠地精確到大約 7 個小數位,一個 float64 精確到大約 15 個小數位。


由于浮點數不可能達到完美的準確性,==或者!=必須非常小心地進行比較!


查看完整回答
反對 回復 2021-10-18
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

為什么 Go 有幾種不同的類型?處理不同類型/種類的數據。


為什么 Go 有幾種不同的整數類型?處理不同類型/種類的整數數據。


還有更多你沒有列出的:


byte    alias for uint8

rune    alias for int32

有符號和無符號之間的區別非常明顯。在 Java 中沒有無符號整數,我發現它比擁有額外的類型更令人困惑,并且可以方便地選擇。在 Java 中編寫與發送/接收無符號整數數據的其他系統互操作的應用程序很煩人。


關于位大小,您可以方便地選擇最適合您的內存需求(或內存嚴格性)并限制變量表示的值的可能范圍。不會增加語言或程序的復雜性。


選擇整數變量位大小的“調色板”并沒有用盡,大多數其他語言提供相同范圍的整數類型。如果排除符號,則 Java 基本上具有相同的數量:


Java         Go

-------------------------

byte    =>   int8

short   =>   int16

int     =>   int32

long    =>   int64


查看完整回答
反對 回復 2021-10-18
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

C99 語言具有類似的分類 thru <stdint.h>(而 C 更細粒度,具有類似 的類型int_fast32_t);擁有這么多的整數類型對于可移植性和效率很有用。


與 C99 和 C++ 的兼容性可能足以成為 Go 擁有這些類型的理由。


您可能想要編寫可以在嵌入式微控制器、平板電腦(32 位 ARM)、廉價筆記本電腦(32 位 x86)、更大的臺式機(64 位 x86-64)、服務器(也許還有 PowerPC 或 64 位AARCH64 ARM)上高效運行的代碼等等...而且您在某些操作系統上有各種編程模型或ABI(例如,我的 Linux 桌面上的x86、x32、amd64)。


在各種架構上,積分運算的成本可能會有很大差異。在某些機器上,添加 anint可能比添加C long(或int64來自Go 的an )成本更高。在其他機器上(可能是大多數機器),情況可能正好相反。和CPU緩存的考慮可能問題很多WRT性能。在某些情況下(例如,如果您有十億大小的數組)數據大小很重要。最后,對于來自外部的二進制數據,大小、布局、對齊和字節順序很重要。閱讀有關序列化的信息。


查看完整回答
反對 回復 2021-10-18
  • 3 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號