странное поведение scanf для краткого int

код выглядит следующим образом:

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

после линииscanf("%d",&a);&nbsp;значение м становится0.

Я знаю, что это может быть вызвано scanf: тип a короткий, а тип ввода int. Но как это может повлиять на значение m?

Большое спасибо !