首頁  >  文章  >  後端開發  >  為什麼 fmt.Printf 在 Go 中顯示有符號整數的不同二進位表示形式?

為什麼 fmt.Printf 在 Go 中顯示有符號整數的不同二進位表示形式?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 06:54:30161瀏覽

Why does fmt.Printf display a different binary representation for signed integers in Go?

fmt.Printf 如何格式化有符號整數的二進制數

在電腦系統中,有符號整數通常使用二進位補碼表示法表示。然而,當使用 fmt.Printf 列印有符號整數的二進位表示時,可能會遇到意想不到的結果。

例如,考慮以下程式碼:

var i int8 = -5
fmt.Printf("%b", i)

此程式碼會產生一個輸出“-101”,這不是“-5”的預期二進位補碼表示。這種差異源自於 fmt.Printf 對二進位格式的內部處理。

問題在於 fmt.Printf 中將負符號整數轉換為正整數。此函數反轉輸入整數的符號,使其實際上成為無符號整數。因此,fmt.Printf 在轉換後的無符號二進位表示之前附加一個“-”號。

要確認此行為,我們可以將有符號整數轉換為無符號整數並列印它:

var u uint8 = uint(i)
fmt.Printf("%b", u)

這會產生「11111011」的輸出,它與-5 的二進位補碼表示形式對齊。因此,儘管底層值確實在內部以二進位補碼表示,但 fmt.Printf 函數會在輸出期間變更格式。

以上是為什麼 fmt.Printf 在 Go 中顯示有符號整數的不同二進位表示形式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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