int a = -1;
unsigned int b = a;
こうするとbは標準Cならどんな環境でもUINT_MAXになるんですが

unsigned int b = (unsigned int)a;
こうした場合って、このキャストは
(1)aのビットパターンを無理やり unsigned int として解釈するのか (C++のreinterpret_cast)
→負数の表現が2の補数なら UINT_MAX
 1の補数なら UINT_MAX-1
 絶対値と符号フラグなら…いくつだ?

(2)aをunsigned int に変換するのか (C++のstatic_cast)
→環境によらず UINT_MAX

どっちでしょうか?
あいにく手元には負数の表現方法が2の補数の環境しかないので、確かめられません