Comprendre les débordements constants dans Go
Le langage de programmation Go offre un système de types complet, incluant le concept de constantes. Cependant, lorsque l'on travaille avec des constantes, il est essentiel d'être conscient des débordements potentiels. Un de ces cas implique l'utilisation d'une constante non typée pour effectuer des opérations au niveau du bit sur une variable typée.
Description du problème
Considérez l'extrait de code suivant :
<code class="go">userid := 12345 did := (userid & ^(0xFFFF << 48))</code>
En essayant de compiler ce code, vous pouvez rencontrer le message d'erreur :
./xxxx.go:511: constant -18446462598732840961 overflows int
Explication
L'expression ^(0xFFFF << 48) représente une constante non typée. Dans Go, les constantes non typées peuvent prendre des valeurs arbitrairement grandes. Dans ce cas, le résultat de l'opération de négation est -0xffff000000000001, ce qui est trop grand pour tenir dans un int.
Lorsque vous attribuez le résultat de l'opération au niveau du bit à la variable did, qui est de type int, le compilateur tente de convertir la constante non typée en int, ce qui entraîne une erreur de débordement.
Solution
Pour résoudre ce problème, vous pouvez utiliser une constante alternative qui correspond dans le type int. Par exemple, vous pouvez remplacer l'expression problématique par 1<<48 - 1. Ce calcul produit la constante 0x0000ffffffffffff, qui est compatible avec int64 sur les systèmes 64 bits.
Astuce supplémentaire
Si vous visez la portabilité, il est recommandé d'utiliser int64 au lieu de int dans votre code. Cela garantit que le code mentionné fonctionnera correctement même sur les systèmes où int est de 32 bits.
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!