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

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

為什么不用 uint32 而不是 int64?

為什么不用 uint32 而不是 int64?

Go
慕容森 2022-06-01 11:01:42
go界面中也有一些類似的設計。例如,讀寫的結果只能是 values >= 0。為什么不只使用unsigned int類型?使用有符號類型的目的是什么?// The Copy function uses ReaderFrom if available.type ReaderFrom interface {    ReadFrom(r Reader) (n int64, err error)}// The Copy function uses WriterTo if available.type WriterTo interface {    WriteTo(w Writer) (n int64, err error)}
查看完整描述

1 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

我在Go Programming Language (A. Donovan, B. Kernighan)一書中找到了一個很好的解釋:


盡管 Go 提供了無符號數和算術,但我們傾向于使用有符號int形式,即使對于不能為負數的量,例如數組的長度,盡管uint這似乎是一個更明顯的選擇。事實上,內置len函數會返回一個 signed int,就像在這個循環中以相反的順序宣布獎牌一樣:


medals := []string{"gold", "silver", "bronze"}

    for i := len(medals) - 1; i >= 0; i-- {

    fmt.Println(medals[i]) // "bronze", "silver", "gold"

}

另一種選擇將是災難性的。如果len返回一個無符號數,那么i也將是 a uint,并且根據定義,條件i >= 0 將始終為真。在第三次迭代(其中)之后i == 0,該i--語句將導致i變為不是-1,而是最大值uint,并且medals[i]通過嘗試訪問切片邊界之外的元素,計算會在運行時失敗或恐慌。出于這個原因,無符號數傾向于僅在需要其位運算符或特殊算術運算符時使用,例如在實現位集、解析二進制文件時。


查看完整回答
反對 回復 2022-06-01
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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