¿Por qué debería rodearme explícitamente con "sin marcar"?

Hay alguien capaz de explicarme este extraño comportamient

    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 de consola vacía, conN comprobación aritmética habilitada (por defecto es). Gracias a todos de antemano.

EDIT: se suponía que debía ser lo suficientemente claro, pero no para todos.

Sé que una palabra no puede caber en un byte. Pero, por defecto, un programa C # permite ciertas operaciones "peligrosas", principalmente por razones de rendimiento.

e manera similar, puedo sumar dos enteros grandes juntos y no tener ningún desbordamiento.

Mi pregunta fue sobre el error de tiempo de compilación anterior: la conversión / asignación de b1 se compila, la b2 no se puede compilar. Aparentemente no hay diferencia, porque ambos son Int32 que tienen el mismo valor.

Espero que esté claro ahora.

Respuestas a la pregunta(3)

Su respuesta a la pregunta