literales numéricos en C# son int
, no byte
(y el desplazamiento de bits serán evaluados por el compilador, por lo tanto, sólo los 510 restos). Por lo tanto, intenta asignar un valor a byte
que no se ajusta. Puede enmascarar con 255:
byte b = (255 << 1) & 0xFF
para reducir el resultado a 8 bits nuevamente. A diferencia de Java, C# no permite que los desbordamientos pasen desapercibidos. Básicamente tendrías dos opciones sensatas cuando intentas asignar 510 a un byte: o fija el valor máximo, luego obtienes 255, o descarta los bits que no encajan, en cuyo caso obtendrás 254.
también puede utilizar unchecked
, como lassevk mentioned:
byte b = unchecked((byte)(255 << 1));
No estoy seguro de por qué pensé que 255 se almacenaría como un 8 bit –
Bueno, 255 ajustes, todo lo anterior no :) – Joey
Cabe señalar, como me empujaron aquí desde otro hilo, que incluso si tiene dos bytes, cualquier operación bit a bit en ellos devolverá un int. –