首頁 >後端開發 >Golang >為什麼 fmt.Printf 在 Go 中顯示有符號整數的二進位表示不正確?

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

Susan Sarandon
Susan Sarandon原創
2024-11-03 11:29:29273瀏覽

Why Does fmt.Printf Display Incorrect Binary Representations for Signed Integers in Go?

二進位補碼和fmt.Printf

原始問題:

當嘗試列印二進位表示時有符號整數,表示fmt.Printf 產生與預期的二進位補碼值不同的輸出。

分析:

二進位補碼是電腦在內部表示有符號的技術整數。例如,-5 將表示為 1111 1011。但是,當 fmt.Printf 與有符號整數一起使用時,會產生意外結果。然而,轉換為無符號整數會產生正確的二進位表示形式。

解釋:

觀察到的行為不是由於整數的內部表示造成的。相反,它是 fmt.Printf 如何格式化二進位數的結果。

fmt.Printf 使用的 fmt.integer 函數在格式化之前將負符號整數轉換為正值。這會導致絕對值的二進位值前面帶有 - 符號。

範例:

<code class="go">var i int8 = -5
fmt.Printf("%b", i) // Outputs: -101 (Incorrect)</code>

在此範例中,-5 轉換為 5二進位形式,然後在前面加上 .,結果為 -101。

解決方案:

要獲得有符號整數的正確二進位表示,可以將其轉換為無符號整數,然後使用 fmt.Printf 列印二進位表示法。

<code class="go">var i int8 = -5
var u uint8 = uint8(i)
fmt.Printf("%b", u) // Outputs: 1111 1011 (Correct)</code>

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

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