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

為什麼在 Go 中將 uint8 轉換為 int8 會導致錯誤?

Barbara Streisand
發布: 2024-10-30 12:43:02
原創
167 人瀏覽過

Why does converting a uint8 to int8 in Go cause an error?

將uint8 轉換為int8

在Go 中,將無符號8 位元整數(uint8) 轉換為有符號8 位元整數( int8) 可能會導致錯誤。讓我們探討一下原因。

考慮以下程式碼:

<code class="go">package main

import "fmt"

func main() {
    a := int8(0xfc)  // compile error
    fmt.Println(a)
}</code>
登入後複製

此程式碼會引發編譯時錯誤:「constant 252 溢位 int8。」要理解這個問題,我們需要參考Go的常數表達式規則。

根據語言規範,常數表達式必須始終由常數類型的值表示。在這種情況下,0xfc 太大,無法放入 int8,其範圍為 -128 到 127。

如果我們延遲型別轉換,如下所示,程式碼編譯時不會出現錯誤:

<code class="go">package main

import "fmt"

func main() {
    a := 0xfc
    b := int8(a)  // ok
    fmt.Println(b)
}</code>
登入後複製
這是有效的,因為0xfc 在轉換為int8 之前被解釋為整數文字。作為整數文字,它可以保存 int8 範圍之外的值,但編譯器會在實際轉換過程中強制進行類型檢查。

關於 Go 中整數轉換的一些額外要點:

    並非所有整數值都適合所有整數類型。例如,int64 不能容納大於 9,223,372,036,854,775,807 的值。
  • 無符號整數型別(uint8、uint16 等)無法容納負值。
  • 將位元組(uint8 的別名)轉換為有符號整數類型,您可以使用以下模式:
<code class="go">var b byte = 0xff
i32 := int32(int8(b))</code>
登入後複製
這可確保保留原始位元組的符號。

以上是為什麼在 Go 中將 uint8 轉換為 int8 會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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