スンマセン、質問です!

ビットシフトで24ビットの時に変な値になっちゃうのは何故?
以下のソースです…

function kansuu()
{
$hoge = array(111,222,333,444);
foreach ( $hoge as $nn)
{
$ad += $nn << $i;
$i += 8;
}
return( $ad );
}
で、何故か結果が
int(111) int(56943) int(21880431) int(-1118970257)
何で最後がマイナス?補数って奴デスカ??
ちなみに、 $nn << $i の部分だけでみても最後だけマイナスになってますた!
理由(出来れば解決方法も…)教えてエロい人っ!!