下記コードでprintfに渡す情報は、%dだけで引数の型情報を与えていないのに、異なるバイト数の
引数をきちんと処理できているのは何故でしょうか?

#include <stdio.h>

int main() {
char a = 1;
short b = 2;
int c = 3;

printf("%d %d %d", a, b ,c); /*=> 1, 2, 3 */
}