Confusion concernant la conversion de uint8 en int8
Question :
Le code suivant tente de convertir une constante uint8 en int8, mais rencontre une erreur de compilation :
<code class="go">package main func main() { a := int8(0xfc) // compile error: constant 252 overflows int8 _ = a }</code>
Par contre, le code suivant ne génère pas l'erreur si vous différez la conversion de type après l'affectation :
<code class="go">package main func main() { a := 0xfc b := int8(a) // ok _ = b }</code>
Quelle est la différence entre ces deux codes ? Aussi, pourquoi le premier code donne-t-il une erreur de compilation ?
Réponse :
Dans le premier code, la constante 0xfc est évaluée avant d'être convertie en type int8. 0xfc est une valeur qui rentre dans uint8, mais pas dans int8. Par conséquent, le compilateur génère l’erreur « constant 252 overflows int8 ».
Dans le deuxième code, la conversion de type se produit une fois l'affectation effectuée. Ceci évalue a comme type uint8, puis le convertit en type int8. Aucune erreur ne se produit donc.
Conclusion :
Si vous souhaitez convertir uint8 en int8, vous devez vous assurer que la valeur de la constante est dans la plage de int8 avant la conversion. Sinon, une erreur de compilation se produira.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!