Maison > Article > développement back-end > Pourquoi la conversion d'un uint8 en int8 dans Go provoque-t-elle une erreur ?
Confusion Conversion de uint8 en int8
Dans Go, conversion d'un entier non signé de 8 bits (uint8) en un entier signé de 8 bits ( int8) peut entraîner une erreur. Voyons pourquoi.
Considérez le code suivant :
<code class="go">package main import "fmt" func main() { a := int8(0xfc) // compile error fmt.Println(a) }</code>
Ce code génère une erreur de compilation : "constant 252 overflows int8". Pour comprendre ce problème, nous devons nous référer aux règles d'expression constante de Go.
Selon la spécification du langage, les expressions constantes doivent toujours être représentables par des valeurs de type constant. Dans ce cas, 0xfc est trop grand pour tenir dans un int8, dont la plage est de -128 à 127.
Si nous différons la conversion de type, comme indiqué ci-dessous, le code se compile sans erreurs :
<code class="go">package main import "fmt" func main() { a := 0xfc b := int8(a) // ok fmt.Println(b) }</code>
Cela fonctionne car 0xfc est interprété comme un littéral entier avant d'être converti en int8. En tant que littéral entier, il peut contenir des valeurs en dehors de la plage de int8, mais le compilateur applique la vérification de type lors de la conversion réelle.
Quelques points supplémentaires concernant la conversion d'entiers dans Go :
<code class="go">var b byte = 0xff i32 := int32(int8(b))</code>
Cela garantit que le signe de l'octet d'origine est conservé.
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!