Maison > Article > développement back-end > Pourquoi mon Go déborde-t-il constamment lors de l'utilisation d'opérations au niveau du bit ?
Dans le domaine de la programmation Go, une question courante se pose : "Pourquoi mon débordement constant lorsque l'ID utilisateur := 12345 et did := (userid &^(0xFFFF << 48))?"
Lors de la compilation d'un tel code, l'erreur redoutée apparaît : "constant -18446462598732840961 overflows int." Mais que se cache-t-il derrière ce message trompeur ?
Le coupable derrière ce malheur est la nature non typée de la constante ^(0xFFFF << 48). Go attribue des valeurs colossales aux constantes non typées, dépassant les limites des entiers conventionnels.
0xffff << 48 donne 0xffff000000000000. Inverser son signe à l'aide de l'opérateur de négation au niveau du bit (^) donne -0xffff000000000001.
Maintenant, la variable userid, initialisée avec la valeur 12345, hérite du type int. Lorsque l'opération ET au niveau du bit (&) est effectuée, le compilateur suppose que la constante non typée doit être rétrogradée au type int. Cette hypothèse conduit à un conflit, car l'ampleur de la constante dépasse la valeur maximale admissible pour int.
Pour résoudre ce problème, adoptez le pouvoir du casting de caractères. . Si vous aviez l'intention d'attribuer la constante 0x0000ffffffffffff, envisagez d'utiliser 1<<48 - 1. Cette expression, lorsqu'elle est utilisée dans des environnements 64 bits, garantit la compatibilité avec des entiers plus grands.
Pour une véritable portabilité, évitez int en faveur de int64, élargissant la portée de votre code pour s'adapter aux architectures 32 bits et 64 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!