En essayant de trouver un schéma pour une classe de bitrate, j'ai décidé d'utiliser des variables de temps de compilation globales pour représenter les configurations de cartes de bits clés, ex. la position initiale de toutes les tours noires.Existe-t-il une limite de n bits lors du décalage de bit?
constexpr uint64_t BLACK_ROOK_INIT = 0x1 | (0x1 << 56);
Cependant, je reçois des erreurs de compilation. Le compilateur semble traiter cette valeur comme une valeur de 32 bits et le lancement de type ou l'ajout de 0 supplémentaires ne semble pas faire de différence. La définition de type provient de.
Dès que je supprime constexp de cette expression, il compile, mais produit toujours l'avertissement équivalent. Pourquoi cela arrive-t-il? Je pensais que ce pourrait être une limitation du pré-processeur, mais le problème persiste sans constexp.
chess.cpp:16:64: error: right operand of shift expression ‘(1 << 56)’ is >= than the precision of the left operand [-fpermissive]
Pour votre information, cela aussi ne compile pas
constexpr int64_t BLACK_ROOK_INIT = (int64_t)0x1 | (int64_t)(0x1 << 32);
'1' * est un 'int'. Vous pouvez utiliser 'uint64_t (1)' pour obtenir une valeur plus large. –
Cela ne compile toujours pas. Je vais ajouter ci-dessus pour démontrer. – mreff555
1 est int. La conversion en int64_t arrive * après * le décalage. Tu veux 1LL. – deviantfan