C言語すら難し過ぎて生きるのが辛い

「よく分からんところでtypedefされたスカラ型 Scalar_t の変数 x に対し

printf( ((x == -1) == (x == SIZE_MAX)) ? "true\n" : "else\n" );

が何を表示するか,条件別にまとめよ」と言われたら正しい答えができるか?
どうも char, short, int が全部(今時のCPUでALUにとって自然な,32 bitの) int に変換されるみたいなことはよく書かれているが,そろそろ (unsigned) long long とかの64 bit変数の絡む型変換ルールについて詳しく知りたい...