原始問題:
當嘗試列印二進位表示時有符號整數,表示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中文網其他相關文章!