混乱 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>
このコードでは、「定数 252 が int8 をオーバーフローします。」というコンパイル時エラーが発生します。この問題を理解するには、Go の定数式ルールを参照する必要があります。
言語仕様によれば、定数式は常に定数型の値で表現可能でなければなりません。この場合、0xfc は大きすぎて、範囲が -128 ~ 127 の int8 に収まりません。
次に示すように型変換を延期すると、コードはエラーなしでコンパイルされます。
<code class="go">package main import "fmt" func main() { a := 0xfc b := int8(a) // ok fmt.Println(b) }</code>
0xfc は int8 に変換される前に整数リテラルとして解釈されるため、これは機能します。整数リテラルとして、int8 の範囲外の値を保持できますが、コンパイラは実際の変換中に型チェックを強制します。
Go での整数変換に関する追加のポイント:
<code class="go">var b byte = 0xff i32 := int32(int8(b))</code>
これにより、元のバイトの符号が確実に保持されます。
以上がGo で uint8 を int8 に変換するとエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。