首頁  >  文章  >  後端開發  >  為什麼 Go 將 -1 列印為十六進位格式的'-1”,而 C 列印'ffffffffffffffff”?

為什麼 Go 將 -1 列印為十六進位格式的'-1”,而 C 列印'ffffffffffffffff”?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-19 01:43:02746瀏覽

Why does Go print -1 as

Go 和C 之間的十六進位列印差異

在Go 程式語言中,使用%x 格式列印64 位元整數-1結果為“-1”。然而,在C語言中,相同的格式對於正整數會輸出「ffffffffffffffff」。這種行為一開始可能看起來違反直覺,但它源自於 Go 和 C 處理整數表示方式的根本差異。

在 Go 中,整數的 %x 動詞使用十六進位表示來表示數字的值。對於像-1這樣的負數,其十六進位表示為“-ff”。這遵循始終根據類型明確格式化的 Go 約定。要將有符號整數列印為無符號值,必須明確轉換它。

例如:

i := -1 // type int
fmt.Printf("%x", i)  // prints "-1"
fmt.Printf("%x", uint(i))  // prints "ffffffffffffffff"

此行為確保不同類型之間的表示一致。

Rob Pike 解釋了負數預設行為背後的原因:

「因為如果是這樣,就無法列印某些內容作為負數,正如您所看到的,這是一個更短的表示形式。雖然遇到帶符號的十六進制數字可能是意想不到的,但它與 Go 對顯式性和類型安全性的強調是一致的。

以上是為什麼 Go 將 -1 列印為十六進位格式的'-1”,而 C 列印'ffffffffffffffff”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn