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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top