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中文網其他相關文章!