Confusion about Converting uint8 to int8
Question:
The following code attempts to convert a uint8 constant to an int8, but encounters a compile error:
<code class="go">package main func main() { a := int8(0xfc) // compile error: constant 252 overflows int8 _ = a }</code>
一方で、次のコードでは、型変換を代入後に延期すると、エラーが発生しません。
<code class="go">package main func main() { a := 0xfc b := int8(a) // ok _ = b }</code>
これらの 2 つのコードの違いは何ですか?また、最初のコードがコンパイル エラーになる理由はなぜですか?
Answer:
第 1 のコードでは、int8 型に変換する前に定数 0xfc が評価されます。0xfc は uint8 に収まる値ですが、int8 には収まりません。そのため、コンパイラは "constant 252 overflows int8" というエラーを生成します。
第 2 のコードでは、代入が行われた後に型変換が行われます。これにより、a は uint8 型として評価され、その後 int8 型に変換されます。したがって、エラーは発生しません。
結論:
uint8 を int8 に変換する場合、変換する前に定数の値が int8 の範囲内であることを確認する必要があります。さもないと、コンパイル エラーが発生します。
以上がuint8 定数を int8 に直接変換するとコンパイル エラーが発生するのに、代入後に変換を行うとコンパイル エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。