Les littéraux numériques en C# sont int
, et non byte
(et le décalage de bits sera évalué par le compilateur, donc seul le 510 reste). Vous essayez donc d'attribuer une valeur à un byte
qui ne correspond pas. Vous pouvez masquer avec 255:
byte b = (255 << 1) & 0xFF
pour réduire à nouveau le résultat à 8 bits. Contrairement à Java, C# n'autorise pas les dépassements à ne pas être détectés. Fondamentalement vous auriez deux options raisonnables en essayant d'assigner 510 à un byte: Soit pincez à la valeur maximum, alors vous obtiendriez 255, ou jetez les bits qui ne tiennent pas, auquel cas vous obtiendriez 254.
vous pouvez également utiliser unchecked
, comme lassevk mentioned:
byte b = unchecked((byte)(255 << 1));
Je ne sais pas pourquoi je pensais 255 serait stocké comme un 8 bits –
Eh bien, 255 correspond, tout ce qui précède ne fonctionne pas :) – Joey
Il convient de noter, comme je l'ai poussé ici d'un autre thread, que même si vous avez deux octets, toute opération sur bit sur eux retournera un int. –