Che differenza c'e' tra typedef e #define ??

Perche' in un caso del genere sono Uguali
codice:
#define MIO_DEFINE_INT     unsigned short int
typedef unsigned short int MIO_TYPEDEF_INT

int main() {
    MIO_DEFINE_INT a = 5;
    MIO_TYPEDEF_INT b = 5;

    printf("#define unsigned short size: %d\r\n", sizeof(a));
    printf("typedef unsigned short size: %d\r\n", sizeof(b));
    return(0);
}
Grazie.