omportamiento extraño de scanf para int corto

El código es el siguiente

#include <stdio.h>
main()
{
    int m=123;
    int n = 1234;
    short int a;
    a=~0;
    if((a>>5)!=a){
        printf("Logical Shift\n");
        m=0;
    }
    else{
        printf("Arithmetic Shift\n");
        m=1;
    }
    scanf("%d",&a);
    printf("%d\n", m);
}

después de la líneascanf("%d",&a); el valor de m se convierte en0.

Sé que puede ser causado por el scanf: el tipo de a es corto y el tipo de entrada es int. Pero, ¿cómo puede afectar esto el valor de m?

Muchas gracias

Respuestas a la pregunta(10)

Su respuesta a la pregunta