首頁 > 後端開發 > Golang > 主體

為什麼 fmt.Printf 對於以補碼表示的有符號整數輸出'-101”?

DDD
發布: 2024-11-01 13:31:29
原創
217 人瀏覽過

Why Does fmt.Printf Output

二進位補碼和fmt.Printf 二進位輸出

當電腦使用二進位補碼表示有符號整數時,像-5 這樣的值儲存為位元模式“1111 1011”。但是,當嘗試使用 fmt.Printf 列印此二進位表示形式時,如下所示:

<code class="go">var i int8 = -5
fmt.Printf("%b", i)</code>
登入後複製

輸出意外地顯示「-101」。為什麼會發生這種情況?內部是否使用了二進制補碼?

二進位格式的問題

差異在於 fmt.Printf 處理二進位格式的方式。當格式化負符號整數時,它會將其轉換為正值,然後在格式化字串前附加“-”號。

查看fmt.Printf 的源代碼,我們發現fmt.integer 轉換在格式化之前將有符號整數轉換為正值:

<code class="go">    negative := signedness == signed && a < 0
    if negative {
        a = -a
    }</code>
登入後複製

無符號與有符號輸出

為了示範這一點,請考慮以下程式碼:

<code class="go">var u uint8 = uint(i)
fmt.Printf("%b", u)</code>
登入後複製

在這裡,我們在列印之前將i 轉換為無符號整數。這次,輸出正確顯示“11111011”,這是 -5 的補碼。

結論

要正確列印有符號整數的二進位表示,請使用fmt.Printf,我們應該先使用無符號類型將其轉換為正整數。這可確保 fmt.Printf 不會自動將值轉換為負值並在前面加上「-」符號。

以上是為什麼 fmt.Printf 對於以補碼表示的有符號整數輸出'-101”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!