なるほどこういうことか
printf("%d\n", BIN(1111)); // 15
printf("%d\n", BIN(1110)); // 14
printf("%d\n", BIN(1101)); // 13
printf("%d\n", BIN(1100)); // 12
printf("%d\n", BIN(1011)); // 11
printf("%d\n", BIN(1010)); // 10
printf("%d\n", BIN(1001)); // 9
printf("%d\n", BIN(1000)); // 8

だがこの調子で行くと7以下は微妙だな…
printf("%d\n", BIN(0111)); // 3
printf("%d\n", BIN(0110)); // 2
printf("%d\n", BIN(0101)); // 1
printf("%d\n", BIN(0100)); // 0
printf("%d\n", BIN(0011)); // 1
printf("%d\n", BIN(0010)); // 0
printf("%d\n", BIN(0001)); // 1
printf("%d\n", BIN(0000)); // 0

Prefix 0 はCの仕様として8進定数になってしまうから
桁を揃えようとすると上手くいかなくなる…
もちろんBIN( 111)とやればうまく7になるんだが、
二進で定数書きたいときは普通桁そろえたいよな…