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