pulsación de tecla y keyup - ¿por qué el keyCode es diferente?

Relacionado:JavaScript KeyCode vs CharCode

Aquí hay un código que puedes probar en casa o en unjsfiddle:

el.addEventListener( 'keyup', function( e ) { 
    console.log( 'Keyup event' );
    console.log( e.keyCode );
} ); 
el.addEventListener( 'keypress', function( e ) { 
    console.log( 'Keypress event' );
    console.log( e.keyCode );
} );

¿Por qué el keyCode es diferente?

Puedo entender por qué uno debería usar solo la pulsación de tecla, pero lo que no entiendo es cómo dos eventos clave, dados la misma tecla de pulsación en el teclado, dan códigos de tecla diferentes.

PD: no me preocupa la compatibilidad con los navegadores antiguos, probé esto en Chrome, me sorprendió y no pude encontrar una explicación.

Respuestas a la pregunta(3)

Su respuesta a la pregunta