omportamento estranho do scanf para short int

o código é o seguinte:

#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);
}

after the linescanf("%d",&a); o valor de m passa a0.

Eu sei que isso pode ser causado pelo scanf: o tipo de a é curto e o tipo de entrada é int. Mas como isso pode afetar o valor de m?

Muito obrigado

questionAnswers(5)

yourAnswerToTheQuestion