printf("%d \n", a); /* (1) */
printf("%d \n", b); /* (2) */

printf に渡ってるのは int に拡張された値
(1) は 元値 unsigned で 255 ⇒ int に拡張で 255 を渡す
(2) は 元値 signed で -1 ⇒  int に拡張で -1 を渡す