Pourquoi ne puis-je pas utiliser la logique booléenne sur les octets?
-
06-07-2019 - |
Question
En C # (3.5), j'essaie les solutions suivantes:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
et le message d'erreur 132 s'affiche: "Impossible de convertir implicitement le type" int "en" octet ". Une conversion explicite existe (manque-t-il un casting?). La même chose arrive avec | et ^.
Qu'est-ce que je fais mal? Pourquoi me pose-t-il des questions sur Ints? Pourquoi ne puis-je pas utiliser la logique booléenne sur les octets?
La solution
Différents opérateurs ne sont pas déclarés pour octet
- les deux opérandes sont promus en int
et le résultat est int
. Par exemple, addition:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error
Notez que les assignations composées fonctionnent:
byte1 += byte2;
Il y avait une récente question sur le responsable SO à ce sujet . Je conviens que cela est particulièrement gênant pour les opérations au niveau des bits, où le résultat doit toujours être de la même taille, et il s’agit d’une opération logiquement tout à fait valide.
Pour contourner le problème, vous pouvez simplement convertir le résultat en octet:
byte byte3 = (byte) (byte1 & byte2);
Autres conseils
Parce que les types d'octet (et court) n'implémentent pas ces opérateurs
Voir Spec: 4.1.5