¿Hay alguien que pueda explicarme este extraño comportamiento?¿Por qué debería rodear explícitamente con "desmarcado"?
int i = 0x1234;
byte b1 = (byte)i;
byte b2 = (byte)0x1234; //error: const value '4660' can't convert to byte (use unchecked)
byte b3 = unchecked((byte)0x1234);
byte b4 = checked((byte)i); //throws
byte b5 = (byte)(int)0x1234; //error: same as above
NOTA: Es una aplicación vacía de la consola, con NO aritmética comprobación habilitada (por defecto es). Gracias a todos de antemano.
EDIT: Supuse que era lo suficientemente claro, pero no para todos.
Sé que una palabra no cabe en un byte. Pero, de forma predeterminada, un programa C# permite ciertas operaciones "peligrosas", principalmente por motivos de rendimiento.
Del mismo modo, puedo sumar dos enteros grandes juntos y sin desbordamiento alguno.
Me sorprendió el error de tiempo de compilación anterior: el reparto/asignación b1 está compilado, el b2 no se puede compilar. Aparentemente no hay diferencia, porque ambos tienen Int32 teniendo el mismo valor.
Espero que esté claro ahora.
No hablo C# y no sé lo que significa "comprobado" y "no marcado", pero sé que no puede caber un número hexadecimal de cuatro dígitos en un byte. –
¿Qué comportamiento es "extraño" para ti? Nos ha dado ** pasos para reproducir ** y ** resultado real **, pero no ** resultado esperado **. – AakashM